Python 属性错误:';模块';对象没有属性';请求';

Python 属性错误:';模块';对象没有属性';请求';,python,python-3.x,python-3.3,Python,Python 3.x,Python 3.3,在Python 3.3中运行以下代码时: import urllib tempfile = urllib.request.urlopen("http://yahoo.com") 我得到以下错误: 我这样做也是为了验证: 我做错了什么?在Python 3中,urllib模块已被拆分为多个部分并重命名为urllib.request、urllib.parse和urllib.error 导入urllib.request而不是urllib import urllib.request 有趣的是,我

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

import urllib
tempfile = urllib.request.urlopen("http://yahoo.com")
我得到以下错误:

我这样做也是为了验证:


我做错了什么?

在Python 3中,
urllib
模块已被拆分为多个部分并重命名为
urllib.request
urllib.parse
urllib.error


导入
urllib.request
而不是
urllib

import urllib.request

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

Spyder和PyCharm都在我的机器上使用相同的解释器:在PyCharm中,我需要执行以下操作

导入urllib.request

在Spyder期间

导入URL库


没有问题

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

  • 在可视化代码中,您必须编写import urllib.request,而不仅仅是import urllib
  • 此外,每当出现诸如模块x没有属性y之类的错误时,这是因为您已将当前文件命名为与尝试导入的包相同的文件
  • 因此,python中导入的工作方式是,它首先搜索当前目录,如果它找到了您要查找的模块/包“x”,则假定它已找到目标文件,并搜索“y”。由于您尚未定义“y”,因此出现了上述错误

您确定要在Python 3中运行它吗?是的,我确定!!,我也试过在3.2和3.4上运行它。不走运:(可能直接尝试导入urllib.request?如果
urllib
将使用3.3.x引入其子模块本身,则会出现此错误。@JonathanLonowski谢谢!你应该将其作为答案发布,以便我可以接受它;)当你在同一目录中有一个名为标准模块的文件时,也会出现此错误。恼人但真实。小心!我已经确定并在其他3.x版本上尝试了它,还在问题中添加了一个图片,以确保有urllib模块。仍然不走运:3出于某种原因,我的代码在一台机器上使用
import urllib
,而另一台机器确实需要
import urllib.request
。。两者都运行3.4.2。不管怎样,这真是奇迹@Joost,通过运行
python-V
检查您正在使用的版本。或者在脚本中放入以下行并运行它:
importsys;打印(sys.version)
@johan,因为导入包不会自动导入其子模块。(有些是这样的,比如os.path…)虽然这是可行的,但最好解释一下为什么
import-urllib
不起作用,以便读者更好地理解这个问题。解释器中运行着更奇怪的程序。导入urllib;urllib.request将为您提供预期的AttributeError,但随后再次运行urllib.request,它就在那里!在解释器中,抛出AttributeError之后,它似乎隐式地导入了所有子模块。很奇怪。