5

我一直在尝试使用 Python 解析 XML,并且发现在我的 XML 标记中出现拼写错误会引发ExpatError. 由于我不认为我的代码驻留在国外,ExpatError一般来说,指的是什么?

拼写错误的代码:

minidom.parseString("<people><pesron>Dan</person><person>John</person></people>")

结果是:

ExpatError                                Traceback (most recent call last)
<ipython-input-5-9c00296c48cb> in <module>()
----> 1 minidom.parseString("<people><pesron>Dan</person><person>John</person></people>")

/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/xml/dom/minidom.pyc in parseString(string, parser)
   1928     if parser is None:
   1929         from xml.dom import expatbuilder
-> 1930         return expatbuilder.parseString(string)
   1931     else:
   1932         from xml.dom import pulldom

/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/xml/dom/expatbuilder.pyc in parseString(string, namespaces)
    938     else:
    939         builder = ExpatBuilder()
--> 940     return builder.parseString(string)
    941 
    942 

/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/xml/dom/expatbuilder.pyc in parseString(self, string)
    221         parser = self.getParser()
    222         try:
--> 223             parser.Parse(string, True)
    224             self._setup_subset(string)
    225         except ParseEscape:

ExpatError: mismatched tag: line 1, column 21
4

1 回答 1

2

总结和扩展对该问题的评论:

ExpatErrorexpat报告错误时引发的异常类型。expat 是 Python 标准库的 XML 解析模块。

minidom,Python 的文档对象模型接口的最小实现,在minidom.parseString()被调用时在内部使用 expat 来解析 XML 输入。

输入 XML 中的拼写错误给它留下了一个<pesron>未关闭的标签,触发 expat 通过抛出ExpatError.

至于名字 expat 的由来,它不是对英文“expatriate”的引用,而是模块描述的缩短版本:(E)Xml PArser Toolkit。

于 2021-01-04T09:27:13.603 回答