尝试使用xml.etree.ElementTree.parse()解析格式错误的XML内容会在Python 2.6.6和Python 2.7.5中引发不同的异常
Python 2.6:xml.parsers.expat.ExpatError
Python 2.7:xml.etree.ElementTree.ParseError
我正在编写必须在Python 2.6和2.7中运行的代码。 afaik没有办法定义只在Python中用Python版本运行的代码(类似于我们在C / C ++中用#ifdef做的事情)。我看到处理这两个异常的唯一方法是捕获两者的共同父异常(例如Exception)。但是,这并不理想,因为其他异常将在同一个catch块中处理。还有其他办法吗?
答案 0 :(得分:3)
这不是很漂亮,但它应该可行......
ParseError = xml.parsers.expat.ExpatError if sys.version < (2, 7) else xml.etree.ElementTree.ParseError
try:
...
except ParseError:
...
您可能需要根据版本修改您导入的内容(或者在ImportError
导入各种子模块时捕获xml
,如果它们不存在于python2上.6 - 我没有安装该版本,因此我暂时无法进行强大的测试......)
答案 1 :(得分:0)
根据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>