模块导入适用于解释器,但不适用于脚本

时间:2011-05-28 03:46:18

标签: python import interpreter elementtree

我正在开始关注这个网站http://www.bigfatalien.com/?p=223中关于elementtree的教程,所以像往常一样,我在解释器上输入了参考脚本,然后我去了

import xml.etree.ElementTree as xml

并且解释器运行该命令就好并且在intrepreter中使用“xml”没有问题我的IDE甚至在自动完成时显示该类的成员但是只要我在脚本上输入完全相同的行并尝试运行它,它说

  

对象没有属性'etree'

,这条线有效:

import xml

但如果我补充:

xml.etree.ElementTree = xml

尝试运行那个不起作用的脚本,我尝试使用我的IDE(pyscripter)和IDLE,同样的行为。 什么事情发生在这里,这是什么行为,我从来没有读过任何“如何导入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
>>>

2 个答案:

答案 0 :(得分:13)

一个非常愚蠢的问题:您是否将脚本文件命名为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

否则:

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

import sys
print sys.version
print sys.path
import xml.etree.ElementTree as et
print et.__file__
import xml.etree.ElementTree as xml
print xml.__file__

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

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

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
>>>

答案 1 :(得分:1)

当你这样做时:

import xml.etree.ElementTree as xml

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

在您的第二个版本中似乎并非如此。在那里,您将xml导入为xml,然后分配错误的方法:

xml.etree.ElementTree = xml

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

xml = xml.etree.ElementTree

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

在任何情况下,我都看不到你的import xml.etree.ElementTree as xml版本实际上是什么错误它似乎完全符合你的要求(并且在我的脚本中工作正常)。