Skip to main content
 首页 » 编程设计

python之关于这个令人困惑的 Python "No module named expat; Use SimpleXMLTreeBuilderInstead"错误有什么想法吗

2024年10月25日34zhenyulu

场景是这样的——我知道这个问题之前已经在 StackOverflow 上被问过,情况略有不同,但不幸的是,所提供的答案/建议都对我没有任何帮助。

我有一个 Python 文件,它作为参数传递给 Python API,供另一个程序 (PSS\E) 在启动时使用。在我的 Python 文件中,有一个部分使用 ElementTree 库将 XML 文件解析为树结构。这是我的代码:

from xml.etree.ElementTree import ElementTree, Element 
... 
tree = ElementTree.parse(myXmlFileName) 

每当我调用 ElementTree.parse(myXmlFileName) 方法时,我都会收到以下错误:

导入错误没有名为 expat 的模块;请改用 SimpleXMLTreeBuilder

奇怪的是,这个错误是从 ElementTree.py 文件内部抛出的,在 XMLParser 类定义的内部:

class XMLParser(object): 
    def __init__(self, html=0, target=None, encoding=None): 
        try: 
            from xml.parsers import expat 
        except ImportError: 
            raise ImportError("No module named expat; use SimpleXMLTreeBuilder instead") 

根据 StackOverflow 上这个问题的其他一些答案,我尝试使用 SimpleXMLTreeBuilder,但它给了我完全相同的错误。

如果我打开我的 Python shell(顺便说一句,我使用的是 Python 2.7.8)并键入“import xml.parsers.expat”,我不会收到此错误并且一切似乎都已正常导入。我还可以在 Python shell 中运行 ElementTree.parse(myXmlFilePath) 命令而不会出现任何问题。但是,当我尝试通过我输入 PSS\E API 的 Python 文件执行此操作时(PSSE 是带有 Python API 的第三方产品),我按照以下相同的步骤得到了上述错误在 Python shell 中成功。

有没有 Python 专家对此有什么建议?我不认为文件路径会有所不同,因为我系统的 path 变量包括我的 Python 安装位置,并且我已经尝试在不同“主”目录的 Python shell 中使用此代码无论我尝试什么,它似乎都有效。只有当我尝试连接到此第三方应用程序时才会出现此问题。

感谢您的帮助!

请您参考如下方法:

感谢 VooDooNOFX 的建议 - 在与西门子支持部门讨论后,发现我的 psse33.exe 命令行执行需要一个额外的参数“-pyver 27”来指定应用程序需要使用的 Python 版本。希望这可以帮助遇到此问题的其他人。