我从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,但是我的鼻子开始流血,阅读所有技术内容。 请指出我正确的方向?谢谢。
答案 0 :(得分:21)
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)
答案 1 :(得分:14)
重命名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'>
答案 2 :(得分:0)
人们可能遇到的另一个问题是Linux系统上的安装问题。在我的Windows机器上,&#39; turtle&#39;就在那里,我能够import turtle
没有问题。当我在Ubuntu中尝试import turtle
时,它没有找到该模块,所以我尝试安装它。
当我sudo pip install turtle
时,它安装了一个包裹“龟”&#39;这显然是非常不同的:&#34; Turtle是一个HTTP代理,其目的是限制与特定主机名的连接....&#34;这只乌龟&#39;肯定是不有&#34; Screen&#34;或任何与一只小乌龟有关的东西。所以我最终遇到了与module has no attribute 'Screen'
。
对于Ubuntu,我需要做的是:
sudo pip uninstall turtle
sudo apt-get install python-tk
然后当我import turtle
时,找到了所有预期的模块。
答案 3 :(得分:0)
可能没有关系,但我花了一些时间追踪同样的错误,发现了一个不同的原因:我的项目文件夹中有一个名为“copy.py”的文件。
这个“copy.py”是一个赋值,用于创建一个返回列表深层副本的函数。龟库从“复制”中导入“深度复制”;事实证明,已经有一个“copy.py”作为python的一部分(我从未见过/使用过)&amp;通过在我的项目文件夹中有一个名为“copy.py”的文件,它导致turtle导入错误的copy.py,这导致错误被丢入乌龟(我的copy.py赋值的深度复制功能不起作用与python中的那个相同。
这是一个更一般的建议,但是仔细检查并确保没有任何与项目中使用的实际python导入冲突的文件名是很好的。这里列出的内容太多了,但是乌龟使用的内容包括:tkinter,types,math,time,inspect,sys和copy。如果你的文件夹中有.py中的任何一个(例如,如果你以前创建了一个inspect.py),那么turtle将加载而不是内置的库&amp;不行。
答案 4 :(得分:0)
转到保存python文件的目录。有一个名为turtle.py的文件。删除它,或重命名它。这将起作用。 谢谢,