我从this site教我自己的python。在Chapter 3上,当我在给定的例子中输入代码时,我得到以下错误 -
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,但是我的鼻子开始流血,阅读所有技术内容。请指出我正确的方向?谢谢。
Adam Bernier's answer可能是正确的。看起来你有一个名为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)
重命名turtle.py
。它与导入的同名模块发生冲突。
我测试了该站点的代码在Python 2.6中工作(不安装任何外部包)。
来自http://docs.python.org/tutorial/modules.html#the-module-search-path
当导入名为
spam
的模块时,解释器将在当前目录中搜索名为spam.py
的文件,然后在环境变量PYTHONPATH
指定的目录列表中搜索。
所以Python解释器找到你的turtle.py
文件,但没有在该文件中看到Screen
类。
Johnsyweb's answer包含几个关于如何调试此类问题的好技巧。确定导入模块所在文件系统的最直接方法可能是使用repr(module)
或只是在REPL提示符下键入模块名称,例如:
>>> turtle
<module 'turtle' from '/usr/lib/python2.6/lib-tk/turtle.pyc'>
人们可能遇到的另一个问题是Linux系统上的安装问题。在我的Windows机器上,'turtle'就在那里,我能够毫无问题地使用import turtle
。当我在Ubuntu中尝试使用import turtle
时,它没有找到该模块,所以我尝试安装它。
当我做sudo pip install turtle
时,它安装了一个包'turtle',显然是非常不同的:“Turtle是一个HTTP代理,其目的是限制与特定主机名的连接....”这个'乌龟'肯定没有“屏幕”或任何与一只小乌龟有关的东西。所以我最终得到了与module has no attribute 'Screen'
问题中的用户相同的错误。
对于Ubuntu,我需要做的是:
sudo pip uninstall turtle
sudo apt-get install python-tk
然后,当我做import turtle
时,找到了所有预期的模块。
可能没有关系,但我花了一些时间追踪同样的错误,发现了一个不同的原因:我的项目文件夹中有一个名为“copy.py”的文件。
这个“copy.py”是一个赋值,用于创建一个返回列表深层副本的函数。龟库从“复制”中导入“深度复制”;事实证明,已经有一个“copy.py”作为python的一部分(我从未见过/使用过)并且在我的项目文件夹中有一个名为“copy.py”的文件,它导致了龟导入错误的副本。 py,导致错误被抛出龟(我的copy.py赋值的deepcopy函数与python中的函数不同)。
这是一个更一般的建议,但是仔细检查并确保没有任何与项目中使用的实际python导入冲突的文件名是很好的。这里列出的内容太多了,但是乌龟使用的内容包括:tkinter,types,math,time,inspect,sys和copy。如果您的文件夹中包含.py中的任何一个(例如,如果您之前已创建了inspect.py),则将加载turtle而不是内置库并且无法正常工作。
转到保存python文件的目录。有一个名为turtle.py的文件。删除它,或重命名它。这会奏效。谢谢,