开发者

module object has no attribute 'Screen'

开发者 https://www.devze.com 2023-03-06 04:44 出处:网络
I am teaching myself python from this site. On Chapter 3, when I typed the code in the given example, I got the following error--

I am teaching myself python from this site. On Chapter 3, when I typed the code in the given example, I got the following error--

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

Is this something that I need to download and install? I tried loo开发者_StackOverflow中文版king into docs.python.org, but my nose started to bleed reading all that tech stuff. Kindly point me in the right direction please? Thank you.


Adam Bernier's answer is probably correct. It looks like you have a file called turtle.py that Python is picking up before the one that came with your Python installation.

To track down these problems:

% 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.
>>> 

If you see something like this:

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

Then you'll want to move turtle.py (and any corresponding turtle.pyc or turtle.pyo files) in your current working directory out of the way.

As per the comments below, you'll find a wealth of information about a module, including its pathname and contents by calling help() upon it. For example:

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


Rename turtle.py. It is clashing with the imported module of the same name.

I tested that the code from that site works in Python 2.6 (without installing any external packages).

From http://docs.python.org/tutorial/modules.html#the-module-search-path

When a module named spam is imported, the interpreter searches for a file named spam.py in the current directory, and then in the list of directories specified by the environment variable PYTHONPATH.

So the Python interpreter is finding your turtle.py file, but not seeing a Screen class within that file.

Johnsyweb's answer contains several good tips on how to debug this kind of issue. Perhaps the most direct way of determining where on the filesystem an imported module resides is to use repr(module) or simply type the module name at the REPL prompt, e.g.:

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


Another problem that people may encounter is due to an installation issue on Linux systems. On my Windows machine, 'turtle' was just there and I was able to import turtle with no problem. When I tried to import turtle in Ubuntu, it didn't find the module, so I tried to install it.

When I did sudo pip install turtle, it installed a package 'turtle' which apparently is very different: "Turtle is an HTTP proxy whose purpose is to throttle connections to specific hostnames ...." This 'turtle' most certainly does not have "Screen" or anything related to a little drawing turtle. So I ended up with the same error as the user in the question of module has no attribute 'Screen'.

For Ubuntu, what I needed to do was:

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

Then when I did import turtle, all of the expected modules were found.


Go to the directory where you save your python files. There is a file named turtle.py. Either remove it, or rename it. This will work. thanks,


Probably not related, but I spent some time tracking down this same error and found a different cause: I had a file named "copy.py" in the folder with my project.

This "copy.py" was an assignment to make a function that returns a deep copy of a list. The turtle library imports "deepcopy" from "copy"; turns out there's already a "copy.py" as part of python (which I'd never seen/used) & by having a file named "copy.py" in my project folder, it was causing turtle to import the wrong copy.py, which was causing the error to be thrown in turtle (my copy.py assignment's deepcopy function didn't work the same way as the one in python).

This is a more general suggestion, but it's good to double check and make sure you don't have any filenames that are in conflict with actual python imports used in your project. There are too many to list here, but ones used by turtle include: tkinter, types, math, time, inspect, sys, and copy. If you have any of these with a .py in your folder (for example, if you had previously created an inspect.py), turtle will be loading that instead of the built-in library & will not work.

0

精彩评论

暂无评论...
验证码 换一张
取 消