2011-05-28 41 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

相關問題