这是我第一次使用Python中的海龟模块,但我似乎不能导入它。
这是我的代码:

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”。
换句话说,你的程序基本上是自己导入,而不是海龟图形模块。
这里有一些代码来演示这个问题。
乌龟.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)

我想我应该展示代码实际打印的是什么…
当run asturtle.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

是印刷品。
为什么“帮助”信息和42个打印两次?这是因为turtle.py中的所有代码都是在导入时执行的,然后在import语句之后遇到时再次执行。请注意,python不会尝试导入它已经导入的模块(除非显式告知使用reload导入)。如果python重新导入,那么上面的代码将陷入无限的导入循环中。
当run asmockturtle.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属性。

10-06 02:19
查看更多