2012-10-08 67 views
2

我正在使用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) 

回答

2

最終,唯一的答案是,你必須趕上Exceptionminidom未實現DOMException,雖然它確實使用了xml.dom中的一些一般例外,但它也可以自由使用TypeError和其他標準python例外,其中只有一個公共基礎本身是Exception

+0

好的。 :(謝謝你提供的信息 – missingfaktor

+0

@missingfaktor:實際上,如果你需要更具體的東西,那麼'minidom'不適合你 - 這是'minidom'的「超輕量級」精益的一部分。沒有提供你可能想看'lxml','ElementTree',或任何其他可用的DOM提供商 –

+0

好的,我會堅持暫時停留在minidom,並在需要時切換。接受你的文章作爲答案。謝謝。 – missingfaktor

3

我想這是你想要什麼:

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) 
+0

我嘗試了一個格式不正確的字符串,這就是它引發的。但它總是會引起同樣的異常嗎?解析器的選擇依賴於什麼? – missingfaktor

+1

'minidom'直接引發了許多不能從'ExpatError'繼承的異常(實際上並不能保證默認的解析器在給定版本的python中仍然會是'expatbuilder') –

+0

'minidom'確實會引發其他異常,但在格式錯誤的XML(以及當前使用的'expat')的情況下,我認爲它總是引發'ExpatError',因爲它是一個分析錯誤。我需要深入研究來確認這一點。 –