【问题标题】:Why is this Python script failing? (xml.etree)为什么这个 Python 脚本失败了? (xml.etree)
【发布时间】:2021-11-21 16:24:03
【问题描述】:

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

这是“我没有改变任何东西,但它坏了”的事情之一。环境为 Windows 10、Python 3.8 和 PyCharm 2019.3.5。

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

在脚本的开头,我从 xml 导入 etree:

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'

我有一个“except”块,但它永远不会被执行,因为它的范围是 etree.ElementTree.ParseError。

从表面上看,错误信息是完全错误的。我知道脚本找到了 etree.ElementTree,因为它跑过了 import 语句,当我将模块名称拼错为实验时,它就在那里失败了。 ElementTree 是标准 Python 库中 xml.etree 的一个元素,所以我想不出脚本 可能 失败的方式。消息一定是想告诉我什么,但是什么?

【问题讨论】:

    标签: python pycharm xml.etree


    【解决方案1】:

    你必须使用这个语法:

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

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

    【讨论】:

    【解决方案2】:

    我知道脚本找到了 etree.ElementTree,因为它超出了导入语句

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

    ElementTree是标准Python库中xml.etree的一个元素

    etree 是一个目录。该目录包含一个名为ElementTree.py 的文件,但您无法通过导入etree 来访问它。 (如果 etree/__init__.py 导入了 ElementTree,您会这样做,但在这种情况下不会)。

    正如@arsalan 所说,您必须明确导入 ElementTree。

    【讨论】:

    • 如果我的术语没有完全正确,我很抱歉。我使用的导入语句与 arsalan et 完全一样。人。指定的。正如我所说,这段代码已经过完全调试,即它编写正确并且可以正常工作。 /// 我认为我需要将项目附加到问题中以便我们进一步了解,但正如我所说,我没有在页面上看到这样做的方法。
    • 我得到了这个工作。我必须导入 etree 包 ElementTree 模块:from xml import etreefrom xml.etree import ElementTree。 /// 我重读了import 文档,我明白为什么我需要这样做。我不明白为什么我上周不需要它(当时我可以更容易地发现错误,因为它不会出现在我没有更改的脚本的一部分中)。任何人都可以提出一个理论吗? /// 可以用xml.etree的init.py的变化来解释,但是一直没有;该文件的时间戳是我在 2019 年安装 Python 3.8 时开始的。
    • 一种解释是,有问题的行根本没有在您之前的测试中执行。该行是否仅在某些条件下执行?
    • 违规行读取 XML 输入文件。没有它,脚本就不会做任何有用的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2021-02-09
    相关资源
    最近更新 更多