为什么这个Python脚本失败?(xml.etree)



首先:我知道任何想要帮助的人都会要求提供演示错误的代码。这将需要项目的ZIP,我不知道如何将文件附加到StackOverflow问题。如果有人告诉我怎么上传,我会很高兴的。

这是其中之一,"我什么都没有改变,但它打破了!"环境为Windows 10、Python 3.8和PyCharm 2019.3.5。

我在几个星期前离开了一个完全调试状态的项目。今天我添加了一个函数定义和对它的调用。现在程序在尝试为XML树创建解析器时失败了……在新函数被调用之前。

在脚本开头,我从xml中导入了一棵树:

from xml import etree

在失败点,我尝试创建一个解析器:

_parser = etree.ElementTree.XMLParser(encoding="iso-8859-1")

我得到的消息是:

Connected to pydev debugger (build 193.7288.30)
Traceback (most recent call last):
File "C:/Users/... /PartConfig/PartConfig.py", line 47, in <module>
_parser = etree.ElementTree.XMLParser(encoding="iso-8859-1")
AttributeError: module 'xml.etree' has no attribute 'ElementTree'

我有一个"块,但它永远不会被执行,因为它的作用域是etree.ElementTree.ParseError。

从表面上看,错误信息是完全错误的。我知道剧本找到了一棵树。ElementTree,因为它跑过了import语句,当我把模块名拼错为实验时,它就在那里失败了。ElementTree是xml的一个元素。所以我想不出脚本为什么会像它那样失败。这条信息一定是想告诉我什么,但是什么呢?

必须使用以下语法:

from xml.etree import ElementTree
_parser = ElementTree.XMLParser(encoding="iso-8859-1")

正如@Fred Larson在他的评论中解释的那样,你必须导入模块本身,而etree是一个包。

我知道脚本找到了树。ElementTree,因为它跑过了import语句

。import语句为from xml import etree。这里没有提到ElementTree

ElementTree是xml的一个元素。在标准Python库

etree为目录。该目录包含一个名为ElementTree.py的文件,但不能简单地通过导入etree来访问它。(如果etree/__init__.py导入了ElementTree,您会这样做,但在本例中没有)。

正如@arsalan所说,你必须显式地导入ElementTree。

最新更新