【问题标题】:Turtle Module in python not importingpython中的Turtle模块未导入
【发布时间】:2015-11-17 19:07:28
【问题描述】:

这是我第一次在 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 是您的程序的名称。对吗?
  • 我认为您实际上想使用pen 而不是Pen,而且我认为您不能将多支笔存储为对象。
  • @SuperBiasedMan:可能;这有点令人困惑,因为 PenTurtle 类的别名。
  • @PM2Ring 是的,如果你可以将多支笔存储为类,那么大写 P 是有意义的,但文档建议 pen() 是一个用于与唯一存在的笔。
  • Pen(不是pen)是在这种情况下要做的事情。将您自己的源文件命名为turtle.py 不是该做的事情。

标签: python turtle-graphics


【解决方案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

已打印。

为什么“帮助”消息和 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 属性。

【讨论】:

    【解决方案2】:

    我认为解决方案是输入以下内容:

    pen1 = turtle.Pen()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2019-05-23
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      相关资源
      最近更新 更多