如何处理不同版本中出现的Python异常

2024-09-26 22:55:08 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用解析格式错误的XML内容xml.etree.ElementTree.parse()在Python2.6.6和Python2.7.5中引发不同的异常

Python 2.6:xml.parsers.expat.外派错误

Python 2.7:xml.etree.ElementTree。解析错误

我正在编写必须在Python2.6和2.7中运行的代码。AfAIK没有办法定义代码,它只在Python中运行在Python版本中(类似于我们可以用C/C++中的IFIFF做的)。我认为处理这两个异常的唯一方法是捕获两个异常的共同父异常(例如exception)。但是,这并不理想,因为其他异常将在同一个catch块中处理。还有别的办法吗?在


Tags: 代码内容定义parse格式错误xmletree
2条回答

这不漂亮,但应该是可行的。。。在

ParseError = xml.parsers.expat.ExpatError if sys.version < (2, 7) else xml.etree.ElementTree.ParseError

try:
    ...
except ParseError:
    ...

您可能需要根据版本修改导入的内容(或者在从xml导入不同子模块时捕获ImportError,如果python2.6上不存在这些子模块,我没有安装该版本,因此我目前无法进行健壮的测试…)

根据mgilson的回答:

from xml.etree import ElementTree

try:
    # python 2.7+
    # pylint: disable=no-member
    ParseError = ElementTree.ParseError
except ImportError:
    # python 2.6-
    # pylint: disable=no-member
    from xml.parsers import expat
    ParseError = expat.ExpatError

try:
    doc = ElementTree.parse(<file_path>)
except ParseError:
    <handle error here>
  • 根据Python的版本在运行时定义ParseError。根据是否引发ImportError异常推断Python版本
  • 添加pylint disable指令以不中断pylint验证
  • 由于某些原因,如果只导入了xml,则ParseError=xml.etree.ElementTree.ParseError和ParseError=xml.parsers.expat.ExpatError失败;etree和expat模块的中间导入修复了此问题

相关问题 更多 >

    热门问题