Модуль 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


Может ли кто-нибудь сказать мне, что я сделал не так?
693   1  

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

    Ничего не найдено.