模块对象没有属性'Screen
我正在自学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 个回答
人们在使用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
时,所有我期待的模块都找到了。
把 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'>
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.pyc
或 turtle.pyo
文件)移走。
根据下面的评论,你可以通过调用 help()
来获取关于一个模块的丰富信息,包括它的路径和内容。例如:
>>> import turtle
>>> help(turtle)