Попытка разобрать искаженный XML-контент с помощью xml.etree.ElementTree.parse() вызывает другое исключение в 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 (аналогично тому, что мы могли бы сделать С#ifdef в C/С++). Единственный способ, с помощью которого я могу справиться с обоими исключениями, - поймать общее родительское исключение обоих (например, исключение). Однако это не идеально, потому что другие исключения будут обрабатываться в одном блоке catch. Есть ли другой способ?
Это не очень, но он должен быть работоспособен...
ParseError = xml.parsers.expat.ExpatError if sys.version < (2, 7) else xml.etree.ElementTree.ParseError
try:
...
except ParseError:
...
Вам может потребоваться изменить то, что вы импортируете, на основе версий (или catch ImportError
при импорте различных подмодулей из xml
, если они не существуют на 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>
Exception
что еще больше подчеркивает ваше желание не перехватывать общее родительское исключение ...