1. ホーム
  2. python

[解決済み] PythonのTurtleモジュールがインポートされない

2022-02-16 01:56:31

質問

Python で turtle モジュールを使うのは初めてですが、インポートできないようです?
以下は私のコードです。

from turtle import *

pen1 = Pen()
pen2 = Pen()

pen1.screen.bgcolour("#2928A7") 

というエラーが出て、こんな感じです。

Traceback (most recent call last):
  File "C:\Python34\Python saves\turtle.py", line 2, in <module>
    from turtle import *
  File "C:\Python34\Python saves\turtle.py", line 5, in <module>
    pen1 = Pen()
NameError: name 'Pen' is not defined

何がいけなかったのか、どなたか教えてください。

解決方法は?

問題は、あなたのプログラムの名前が "turtle.py" であることです。

そのため、Pythonがこのステートメントを見たとき
from turtle import *
という名前の最初のマッチングモジュールは turtle であり、その結果 あなたの プログラム、"turtle.py"です。

言い換えれば、あなたのプログラムは基本的に自分自身をインポートし ではなく は、タートルのグラフィックス・モジュールです。


この問題を実証するためのコードを紹介します。

turtle.py

#! /usr/bin/env python

''' Mock Turtle

    Demonstrate what happens when you give your program the same name
    as a module you want to import.

    See http://stackoverflow.com/q/32180949/4014959

    Written by PM 2Ring 2015.08.24
'''

import turtle

foo = 42
print(turtle.foo)
help(turtle)


このコードが実際にどのように表示されるかを示すべきでしょうね...。

として実行すると turtle.py を実行すると、以下のようなヘルプが表示されます。

Help on module turtle:

NAME
    turtle - Mock Turtle

FILE
    /mnt/sda4/PM2Ring/Documents/python/turtle.py

DESCRIPTION
    Demonstrate what happens when you give your program the same name
    as a module you want to import.

    See http://stackoverflow.com/q/32180949/4014959

    Written by PM 2Ring 2015.08.24

DATA
    foo = 42

(END) 

を打つと Q をクリックしてヘルプから抜け出すと、再びヘルプ情報が表示されます。また Q を実行すると

42

42

が印刷されます。

なぜ "help" メッセージと42が2回印刷されるのでしょうか?それは turtle.py は、インポートされたときに実行され、さらに、そのインポート中に import ステートメントを使用します。Pythonはすでにインポートしたモジュールをインポートしようとしないことに注意してください(ただし、明示的に reload ). もしPythonが した。 再インポートすると、上記のコードはインポートの無限ループに陥ってしまいます。


として実行すると mockturtle.py と表示されます。

Traceback (most recent call last):
  File "./mock_turtle.py", line 16, in <module>
    print(turtle.foo)
AttributeError: 'module' object has no attribute 'foo'

そしてもちろんそれは、標準の turtle モジュールは、実際には foo 属性があります。