首先:我知道任何想要帮助的人都会要求提供演示错误的代码。这将需要项目的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。