モジュールオブジェクトには属性 ‘Screen’がありません

python python-3.x
モジュールオブジェクトには属性 ‘Screen’がありません

私はhttp://openbookproject.net/thinkcs/python/english3e/ [このサイト]からpythonを教えています。 http://openbookproject.net/thinkcs/python/english3e/ch03.html [第3章]で、与えられた例でコードを入力すると、次のエラーが発生しました-

Python 3.2 (r32:88445, Mar 25 2011, 19:28:28)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import turtle
Traceback (most recent call last):
  File "", line 1, in
  File "turtle.py", line 2, in
    wn = turtle.Screen()
AttributeError: 'module' object has no attribute 'Screen'
>>>

これはダウンロードしてインストールする必要があるものですか? docs.python.orgを調べてみましたが、私の鼻がすべての技術資料を読み始めました。 正しい方向を教えてください。 ありがとうございました。

  9  3


ベストアンサー

Adam Bernier’s answerはおそらく正しいでしょう。 Pythonがインストールされているファイルの前にPythonが取得している `turtle.py`というファイルがあるようです。

これらの問題を追跡するには:

% python
Python 2.7.1 (r271:86832, Jan 29 2011, 13:30:16)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
[...] # Your ${PYTHONPATH}
>>> import turtle
>>> turtle.__file__
'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/turtle.pyc' # Should be under your Python installation.
>>>

次のようなものが表示された場合:

>>> import turtle
>>> turtle.__file__
'turtle.py'

次に、現在の作業ディレクトリ内の「turtle.py」(および対応する「turtle.pyc」または「turtle.pyo」ファイル)を邪魔にならないように移動します。

以下のコメントにあるように、パス名や内容など、モジュールに関する豊富な情報を見つけるには、モジュールに対してhelp()を呼び出します。 例えば:

>>> import turtle
>>> help(turtle)

21


「turtle.py」の名前を変更します。 インポートされた同じ名前のモジュールと衝突しています。

そのサイトのコードがPython 2.6で動作することをテストしました(外部パッケージをインストールしません)。

_
spam`という名前のモジュールがインポートされると、インタープリターは現在のディレクトリで環境変数 PYTHONPATH`で指定されたディレクトリのリストで `spam.py`という名前のファイルを検索します。
_

そのため、Pythonインタープリターは_your_ turtle.py`ファイルを見つけていますが、そのファイル内に Screen`クラスはありません。

Johnsyweb’s answerには、この種の問題のデバッグ方法に関するいくつかの良いヒントが含まれています。 おそらく、インポートされたモジュールがファイルシステムのどこにあるかを判断する最も直接的な方法は、 `repr(module)`を使用するか、単にREPLプロンプトでモジュール名を入力することです:

>>> turtle

14


人々が遭遇する可能性のある別の問題は、Linuxシステムでのインストールの問題が原因です。 私のWindowsマシンでは、「カメ」がそこにあり、問題なく「カメをインポート」できました。 Ubuntuで「タートルをインポート」しようとしても、モジュールが見つからなかったため、インストールしようとしました。

「sudo pip install turtle」を実行すると、パッケージ「turtle」がインストールされますが、これは明らかに非常に異なります。「Turtleは特定のホスト名への接続を調整するHTTPプロキシです…​」 _not_には「スクリーン」または小さな絵の亀に関連するものがあります。 そのため、「module has no attribute ‘Screen’」という質問のユーザーと同じエラーになりました。

Ubuntuの場合、私がする必要があったのは:

sudo pip uninstall turtle
sudo apt-get install python-tk

その後、「タートルのインポート」を行うと、予想されるすべてのモジュールが見つかりました。

0


おそらく関連していませんが、この同じエラーを追跡するのに少し時間を費やし、別の原因を見つけました。プロジェクトのフォルダーに「copy.py」という名前のファイルがありました。

この「copy.py」は、リストのディープコピーを返す関数を作成するための割り当てでした。 タートルライブラリは、「コピー」から「ディープコピー」をインポートします。 pythonの一部としてすでに「copy.py」があり(これは見たことも使用したこともない)、プロジェクトフォルダに「copy.py」という名前のファイルがあると、タートルが間違ったコピーをインポートする原因になりました。 py、これはタートルでスローされるエラーを引き起こしていました(私のcopy.py割り当てのdeepcopy関数は、pythonの関数と同じようには機能しませんでした)。

これはより一般的な提案ですが、プロジェクトで使用される実際のpythonインポートと競合するファイル名がないことを再確認して確認することをお勧めします。 ここにリストするには多すぎますが、タートルが使用するものには、tkinter、types、math、time、inspect、sys、copyがあります。 フォルダーに.pyを含むこれらのいずれかがある場合(たとえば、以前にinspect.pyを作成した場合)、turtleは組み込みライブラリの代わりにそれをロードしますが、動作しません。

0


Pythonファイルを保存するディレクトリに移動します。 turtle.pyという名前のファイルがあります。 削除するか、名前を変更します。 これはうまくいくでしょう。 ありがとう、

0


タイトルとURLをコピーしました