我正在学习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中运行脚本。
答案 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通常不兼容(参见上面的文档)。