我正在使用xml.dom.minidom
解析字符串中的某些XML。當提供的XML格式錯誤時,我需要處理一個錯誤情況。我發現了什麼錯誤?在錯誤XML的情況下捕獲錯誤
換句話說,下面應該替換BadXml
?
try:
from xml.dom import minidom
in_xml = minidom.parseString(some_string)
except BadXml:
handle_bad_xml(some_string)
我正在使用xml.dom.minidom
解析字符串中的某些XML。當提供的XML格式錯誤時,我需要處理一個錯誤情況。我發現了什麼錯誤?在錯誤XML的情況下捕獲錯誤
換句話說,下面應該替換BadXml
?
try:
from xml.dom import minidom
in_xml = minidom.parseString(some_string)
except BadXml:
handle_bad_xml(some_string)
最終,唯一的答案是,你必須趕上Exception
。 minidom
未實現DOMException
,雖然它確實使用了xml.dom
中的一些一般例外,但它也可以自由使用TypeError
和其他標準python例外,其中只有一個公共基礎本身是Exception
。
我想這是你想要什麼:
from xml.parsers.expat import ExpatError
try:
from xml.dom import minidom
in_xml = minidom.parseString(some_string)
except ExpatError:
handle_bad_xml(some_string)
我嘗試了一個格式不正確的字符串,這就是它引發的。但它總是會引起同樣的異常嗎?解析器的選擇依賴於什麼? – missingfaktor
'minidom'直接引發了許多不能從'ExpatError'繼承的異常(實際上並不能保證默認的解析器在給定版本的python中仍然會是'expatbuilder') –
'minidom'確實會引發其他異常,但在格式錯誤的XML(以及當前使用的'expat')的情況下,我認爲它總是引發'ExpatError',因爲它是一個分析錯誤。我需要深入研究來確認這一點。 –
好的。 :(謝謝你提供的信息 – missingfaktor
@missingfaktor:實際上,如果你需要更具體的東西,那麼'minidom'不適合你 - 這是'minidom'的「超輕量級」精益的一部分。沒有提供你可能想看'lxml','ElementTree',或任何其他可用的DOM提供商 –
好的,我會堅持暫時停留在minidom,並在需要時切換。接受你的文章作爲答案。謝謝。 – missingfaktor