AttributeError:“模块”对象没有属性“请求”


75

当我在Python 3.3中运行以下代码时:

import urllib
tempfile = urllib.request.urlopen("http://yahoo.com")

我收到以下错误:

在此处输入图片说明

我也这样做来验证:

在此处输入图片说明

我究竟做错了什么?


1
您确定要在Python 3中运行它吗?
Ashwini Chaudhary 2014年

是的,我确定!!,我也尝试在3.2和3.4上运行它。不
走运

11
也许import urllib.request直接尝试?它不会出现urllib将在其子模块拉本身3.3.x.
Jonathan Lonowski 2014年

@JonathanLonowski谢谢你!您应该将其发布为答案,以便我接受;)
Pruthvi Raj

当您在同一目录中有一个名为标准模块的文件时,也会出现此错误。烦人但真实。小心!
Nightforce2 '18 -10-16

Answers:


148

urllib模块已经被分成部分和更名在Python 3 urllib.requesturllib.parse,和urllib.error


导入urllib.request而不是urllib

import urllib.request

1
我已经确定并在其他3.x版本上进行了尝试,并在问题中添加了图片以确保有urllib模块。仍然没有运气:3
Pruthvi Raj

2
由于某种原因,我的代码可以import urllib在一台机器上运行,而另一台机器确实要求import urrlib.request..都运行3.4.2。无论如何,这行之有效!
Joost

@Joost,通过run检查您使用的版本python -V。或import sys; print(sys.version)
将以

2
@johan,因为导入packge不会自动导入其子模块。(有些操作,例如os.path ...)
falsetru

1
尽管这行得通,但最好解释一下为什么import urllib不行,以使读者对这个问题有更多的了解。
jdhao

3

有趣的是,我注意到了一些依赖IDE的行为。

Spyder和PyCharm都在我的机器上使用相同的解释器:在PyCharm中,我需要做

导入urllib.request

在Spyder中

导入urllib

很好


解释器中运行的更加奇怪。导入urllib; urllib.request将为您提供预期的AttributeError,但随后再次运行urllib.request,就可以了!似乎在解释器中,抛出AttributeError后,无论如何都会隐式导入所有子模块。很奇怪。
山姆公牛

1

如果这与我的一样在PyCharm上,请确保您的文件名不是urllib.py。


0
  • 在可视代码中,您必须编写import urllib.request而不是仅仅导入urllib。
  • 此外,每当发生诸如模块x没有属性y之类的错误时,这是因为您将当前文件命名为与尝试导入的包相同的名称。
  • 因此,python中import的工作方式是首先搜索当前目录,如果找到了您正在寻找的模块/软件包“ x”,则假定已找到目标文件,然后搜索“ y”。并且由于您尚未定义“ y”,因此会发生上述错误。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.