Модуль Turtle в python не импортируется
Это мой первый раз, когда я использую модуль turtle в python, но я не могу его импортировать?
Вот мой код:
from turtle import *
pen1 = Pen()
pen2 = Pen()
pen1.screen.bgcolour("#2928A7")
И вот ошибка, которую я получаю:
Traceback (most recent call last):
File "C:Python34Python savesturtle.py", line 2, in <module>
from turtle import *
File "C:Python34Python savesturtle.py", line 5, in <module>
pen1 = Pen()
NameError: name 'Pen' is not defined
Может ли кто-нибудь сказать мне, что я сделал не так?
1 ответ:
Проблема в том, что вы назвали свою программу "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 напечатаны дважды? Это потому, что весь код в
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.
Comments