模块对象没有属性'Screen'

问题描述 投票:9回答:5

我从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,但是我的鼻子开始流血,阅读所有技术内容。请指出我正确的方向?谢谢。

python python-3.x
5个回答
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.pycturtle.pyo文件)。

根据下面的评论,您可以通过调用help()找到有关模块的大量信息,包括其路径名和内容。例如:

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

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'>

0
投票

人们可能遇到的另一个问题是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时,找到了所有预期的模块。


0
投票

可能没有关系,但我花了一些时间追踪同样的错误,发现了一个不同的原因:我的项目文件夹中有一个名为“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而不是内置库并且无法正常工作。


0
投票

转到保存python文件的目录。有一个名为turtle.py的文件。删除它,或重命名它。这会奏效。谢谢,

© www.soinside.com 2019 - 2024. All rights reserved.