模块导入在解释器上可用,但在脚本上不可用

2024-10-01 09:35:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我乞求在这个站点上跟随一个关于elementtree的教程http://www.bigfatalien.com/?p=223,所以像往常一样,我在解释器上输入参考脚本,然后我就去了

import xml.etree.ElementTree as xml

解释器很好地运行了这个命令,在intrepreter中使用了“xml”,我的IDE甚至在自动完成时显示了该类的成员,但是当我在一个脚本上输入了完全相同的行并试图运行它时,它说

object has no attribute 'etree'

,这条线工作:

^{pr2}$

但如果我加上:

xml.etree.ElementTree = xml

尝试运行那个不起作用的脚本,我用我的IDE(pyscripter)和空闲的相同行为进行了尝试。 这里发生了什么,这种行为是什么,我从来没有读过“如何在python中导入”的教程或书籍中提到过。我觉得我错过了一些显而易见的东西。在

使用请求的错误消息进行更新

从IDLE 2.6运行提供的行

2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
[u'C:\\Users\\grillermo\\Desktop', 'C:\\Program Files\\PyScripter\\Lib\\rpyc-python2x.zip', 'C:\\Python26\\lib\\site-packages\\dropbox_client-1.0-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\simplejson-2.1.6-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\poster-0.8.1-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\oauth-1.0.1-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\nose-1.0.0-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\mechanize-0.2.5-py2.6.egg', 'C:\\Windows\\system32\\python26.zip', 'C:\\Python26\\DLLs', 'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win', 'C:\\Python26\\lib\\lib-tk', 'C:\\Python26', 'C:\\Python26\\lib\\site-packages', 'C:\\Python26\\lib\\site-packages\\win32', 'C:\\Python26\\lib\\site-packages\\win32\\lib', 'C:\\Python26\\lib\\site-packages\\Pythonwin', 'C:\\Python26\\lib\\site-packages\\wx-2.8-msw-unicode']
2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)]
[u'C:\\Users\\grillermo\\Desktop', 'C:\\Program Files\\PyScripter\\Lib\\rpyc-python2x.zip', 'C:\\Python26\\lib\\site-packages\\dropbox_client-1.0-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\simplejson-2.1.6-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\poster-0.8.1-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\oauth-1.0.1-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\nose-1.0.0-py2.6.egg', 'C:\\Python26\\lib\\site-packages\\mechanize-0.2.5-py2.6.egg', 'C:\\Windows\\system32\\python26.zip', 'C:\\Python26\\DLLs', 'C:\\Python26\\lib', 'C:\\Python26\\lib\\plat-win', 'C:\\Python26\\lib\\lib-tk', 'C:\\Python26', 'C:\\Python26\\lib\\site-packages', 'C:\\Python26\\lib\\site-packages\\win32', 'C:\\Python26\\lib\\site-packages\\win32\\lib', 'C:\\Python26\\lib\\site-packages\\Pythonwin', 'C:\\Python26\\lib\\site-packages\\wx-2.8-msw-unicode']
Traceback (most recent call last):
  File "C:\Users\grillermo\Desktop\xml.py", line 4, in <module>
    import xml.etree.ElementTree as et
  File "C:\Users\grillermo\Desktop\xml.py", line 4, in <module>
    import xml.etree.ElementTree as et
ImportError: No module named etree.ElementTree

翻译

C:\>python
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import xml.etree.ElementTree as et
>>> print et.__file__
C:\Python26\lib\xml\etree\ElementTree.pyc
>>>

Tags: importegglibpackagesassitexmlzip
2条回答

一个非常愚蠢的问题:你把你的脚本文件命名为xml.py?如果是这样的话,不要那么做。。。import xml.anything将在您的脚本文件中查找!给脚本文件指定与要导入的模块相同的名称永远不是一个好主意。在

更新回溯是你的朋友。引导学生仔细阅读。如果你不知道如何阅读它们,在你的问题中包括回溯。在

我敢打赌你的会和这个很相似:

Traceback (most recent call last):
  File "xml.py", line 4, in <module>
    import xml.etree.ElementTree as et
  File "C:\junk\xml.py", line 4, in <module> #### here's the culprit ####
    import xml.etree.ElementTree as et
ImportError: No module named etree.ElementTree

否则:

设置只包含以下行的脚本:

^{pr2}$

运行它,并显示所有输出。。。复制/粘贴到问题的编辑中。在

在计算机上重复以下解释程序会话,并报告打印的内容:

C:\junk>\python26\python
Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import xml.etree.ElementTree as et
>>> print et.__file__
C:\python26\lib\xml\etree\ElementTree.pyc
>>>

当您这样做时:

import xml.etree.ElementTree as xml

您将引入xml.etree.ElementTree“对象”,并将其称为xml。在

在你的第二个版本中似乎不是这样。在这种情况下,您将xml导入为xml,然后以错误的方式分配:

^{pr2}$

这似乎是将ElementTree对象替换为对顶级xml的引用,可能不是您想要的。我很想说:

xml = xml.etree.ElementTree

会是更准确的方法,但我不确定这是否会导致命名问题。在

在任何情况下,我看不出你的import xml.etree.ElementTree as xml版本实际上有什么问题,它似乎完全可以满足您的需要(对我来说,它在脚本中工作得很好)。在

相关问题 更多 >