2011-05-28 95 views
3

我是beggining跟随在ElementTree的教程在这个网站http://www.bigfatalien.com/?p=223所以我照例上键入解释参考脚本和我去模块导入工作在解释,但不能在一个脚本

import xml.etree.ElementTree as xml 

和解释运行该命令就好了,并且在内存中使用“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 
>>> 
+0

宾果! “”“文件”C:\ Users \ grillermo \ Desktop \ xml.py“,第4行,在”“” - 请参阅我的答案。 – 2011-05-28 05:59:10

+1

Python可以从当前目录导入。由于您将文件命名为xml.py,并且它位于IDLE的当前目录中,所以首先将它作为“xml.etree”的基础部分。你的模块没有etree。 – Keith 2011-05-28 06:05:40

+0

谢谢你们,我永远不会想到你可以导入你正在运行的脚本。 – 2011-05-28 06:14:02

回答

12

一个非常愚蠢的问题:你的脚本文件的名字是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 
>>> 
+0

+1,我认为你有它,约翰。可惜我不得不去购物,你在我不在的时候把它拧开了:-) – paxdiablo 2011-05-28 06:09:07

1

当你这样做:

import xml.etree.ElementTree as xml 

你带来在xml.etree.ElementTree“对象”中,并将其称为xml

在你的第二个版本中似乎不是这种情况。在这方面,您导入xmlxml然后分配周围的错误的方式:这似乎与到顶级xml基准来代替ElementTree对象

xml.etree.ElementTree = xml 

,你想可能不是什么。我很想说:

xml = xml.etree.ElementTree 

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

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

+0

如果我在解释器中执行“import xml.etree.ElementTree”,但是如果我在脚本上粘贴完全相同的行,它将发送错误“No module named etree.ElementTree” – 2011-05-28 04:03:42

+0

我没有遇到脚本支持2.5.2中的'import xml.etree.ElementTree'这一行。你确定你正在运行脚本的2.5+版本吗?使用'import sys','print sys.version'来找出。 – paxdiablo 2011-05-28 04:17:37

+0

2.6.6(r266:84297,2010年8月24日,18:46:32)[MSC v.1500 32位(英特尔)] – 2011-05-28 04:18:22

相关问题