3

私は、このサイトhttp://www.bigfatalien.com/?p=223の elementtree に関するチュートリアルに従うことを始めていたので、いつものように、インタープリターで参照スクリプトを入力して行きました。

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

2 に答える 2

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
>>>
于 2011-05-28T05:36:48.750 に答える
1

あなたがするとき:

import xml.etree.ElementTree as xml

あなたはxml.etree.ElementTree「オブジェクト」を持ち込んでそれを呼び出していxmlます。

2番目のバージョンではそうではないようです。xmlその中で、 asをインポートしてxmlから、間違った方法で割り当てます。

xml.etree.ElementTree = xml

ElementTreeオブジェクトをトップレベルへの参照に置き換えているように見えますがxml、おそらくあなたが望んでいたものではありません。私は次のように言いたくなります。

xml = xml.etree.ElementTree

より正確な方法ですが、それが命名に問題を引き起こすかどうかはわかりません.

いずれにせよ、あなたのバージョンで実際にが問題なのかわかりませんimport xml.etree.ElementTree as xml。あなたが望むことを正確に実行しているように見えます(そして、スクリプトでうまく動作します)。

于 2011-05-28T03:53:17.250 に答える