python2.7:一个示例脚本,在C分区中它可以运行但是在D分区中它有AttributeError

时间:2011-05-28 16:11:35

标签: python module urllib

我正在学习python。今天我遇到了一个奇怪的问题。

from urllib import urlopen

url='http://www.google.com'
f=urlopen(url).read()
print f

它是一个示例脚本,它可以在C分区中运行但在D分区中运行 它有AttributeError:

Traceback (most recent call last):
File "D:\urlopen.py", line 1, in <module>
from urllib import urlopen File "D:\urllib.py", line 7, in <module>
nettext=urllib.urlopen(strurl).read()
AttributeError: 'module' object has no attribute 'urlopen'

我在win7中安装了python2.7和python3.1,并在python2.7的shell中运行脚本。

2 个答案:

答案 0 :(得分:1)

我不知道为什么它适用于C:\。无论如何都应该失败。您正在从urllib导入某些内容。您的脚本名为urllib。当前目录位于标准库目录之前,因此您可以自行导入。这只是因为导入被“缓存”(同一个解释器进程中的第二个import x只提供对已导入模块的引用而不是再次加载它),这不会导致无限循环。当然,您的模块没有stdlib urllib包中的任何内容,例如没有urlopen

答案 1 :(得分:0)

在Python 3中,重组了许多模块。其中一个恰好是urllib。要使上述代码在Python 3中工作,您可以这样做:

import urllib.request
url = "http://www.google.com"
f = urllib.request.urlopen(url).read()
print(f)

修改

您还会注意到,在Python 3中,您必须使用括号print。有关从Python 2.x到3.x的更改列表,请参阅this documentation

如果您不是试图在Python 3.1中运行此代码,而是在2.7中运行,那么您的“D分区”似乎指向您的Python 3.1安装,而您的“C分区”指向2.7。 Python 2.x和3.x通常不兼容(参见上面的文档)。