模块对象没有属性'Screen

12 投票
5 回答
41716 浏览
提问于 2025-04-16 17:39

我正在自学Python,学习资料来自这个网站。在第三章的时候,我按照示例输入代码,结果出现了以下错误--

Python 3.2 (r32:88445, Mar 25 2011, 19:28:28) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import turtle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "turtle.py", line 2, in <module>
    wn = turtle.Screen()
AttributeError: 'module' object has no attribute 'Screen'
>>> 

这个错误是我需要下载和安装什么东西吗?我试着去看docs.python.org,但看那些技术内容让我头疼。能不能给我指个明路?谢谢!

5 个回答

1

人们在使用Linux系统时,可能会遇到一个安装方面的问题。在我的Windows电脑上,'turtle'模块直接就可以用了,我可以毫无问题地使用import turtle。但是当我在Ubuntu上尝试import turtle时,它找不到这个模块,于是我决定安装一下。

我输入了sudo pip install turtle,结果安装了一个叫'turtle'的包,但这个包和我想要的完全不一样:“Turtle是一个HTTP代理,目的是限制对特定主机名的连接……”这个'turtle'肯定没有“Screen”或者任何和小画图乌龟相关的东西。所以我最后遇到了和提问者一样的错误:module has no attribute 'Screen'

在Ubuntu上,我需要做的是:

sudo pip uninstall turtle
sudo apt-get install python-tk

然后当我再次输入import turtle时,所有我期待的模块都找到了。

16

turtle.py 改个名字。因为它和你导入的同名模块发生了冲突。

我测试过那个网站上的代码在 Python 2.6 下可以正常运行(不需要安装任何外部包)。

详细信息可以参考 这个链接

当导入一个叫 spam 的模块时,解释器会先在当前目录找一个叫 spam.py 的文件,然后再去环境变量 PYTHONPATH 指定的目录列表中查找。

所以,Python 解释器找到了你的 turtle.py 文件,但在里面没有找到 Screen 这个类。

Johnsyweb 的回答 提供了几个很好的调试建议。最直接的方法是用 repr(module) 来确定导入的模块在文件系统中的位置,或者直接在 REPL 提示符下输入模块名,比如:

>>> turtle
<module 'turtle' from '/usr/lib/python2.6/lib-tk/turtle.pyc'>
22

Adam Bernier的回答可能是对的。看起来你有一个叫做 turtle.py 的文件,Python在使用这个文件,而不是你安装Python时自带的那个。

要找到这些问题的根源,可以这样做:

% python
Python 2.7.1 (r271:86832, Jan 29 2011, 13:30:16) 
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
[...] # Your ${PYTHONPATH}
>>> import turtle
>>> turtle.__file__
'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/turtle.pyc' # Should be under your Python installation.
>>> 

如果你看到类似这样的内容:

>>> import turtle
>>> turtle.__file__
'turtle.py'

那么你需要把当前工作目录中的 turtle.py(还有任何相关的 turtle.pycturtle.pyo 文件)移走。

根据下面的评论,你可以通过调用 help() 来获取关于一个模块的丰富信息,包括它的路径和内容。例如:

>>> import turtle
>>> help(turtle)

撰写回答