【问题标题】:AttributeError: 'module' object has no attribute 'request'AttributeError:“模块”对象没有属性“请求”
【发布时间】:2014-03-09 06:01:44
【问题描述】:

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

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

我收到以下错误:

我也这样做是为了验证:

我做错了什么?

【问题讨论】:

  • 你确定你在 Python 3 中运行它吗?
  • 是的,我确定!!,我也尝试在 3.2 和 3.4 上运行它。没有运气:(
  • 也许直接试试import urllib.requestdoesn't appear urllib 将在 3.3.x 中引入其子模块。
  • @JonathanLonowski 谢谢老兄!你应该把它作为答案发布,所以我可以接受它;)
  • 当您在同一目录中有一个名为标准模块的文件时,也会出现此错误。烦人但真实。小心!

标签: python python-3.x python-3.3


【解决方案1】:

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


导入urllib.request 而不是urllib

import urllib.request

【讨论】:

  • 我已经确定并在其他 3.x 版本上尝试过,还在问题中添加了一张图片以确保有 urllib 模块。仍然没有运气:3
  • 由于某种原因,我的代码在一台机器上与 import urllib 一起工作,而另一台机器确实需要 import urrlib.request.. 都运行 3.4.2。无论如何,这创造了奇迹!
  • @Joost,通过运行python -V 检查您正在使用的版本。或将以下行放入脚本并运行它:import sys; print(sys.version)
  • @johan,因为导入包不会自动导入其子模块。 (有些确实如此,例如 os.path ...)
  • 虽然这样可行,但最好解释一下import urllib为什么不起作用,以便读者对这个问题有更多的了解。
【解决方案2】:

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

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

导入 urllib.request

在 Spyder 中,

导入 urllib

没问题

【讨论】:

  • 更奇怪的是在解释器中运行。导入 urllib; urllib.request 会给你预期的 AttributeError,但然后再次运行 urllib.request,它就在那里!似乎在解释器中,在抛出 AttributeError 之后,它无论如何都会隐式导入所有子模块。很奇怪。
【解决方案3】:

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

【讨论】:

    【解决方案4】:
    • 在可视化代码中,您必须编写 import urllib.request 而不是仅仅 import urllib。
    • 另外,每当出现module x has no attribute y 之类的错误时,都是因为您将当前文件命名为与您尝试导入的包相同。
    • 因此,python 中导入的工作方式是它首先搜索当前目录,如果找到您正在寻找的模块/包“x”,则假定它已找到目标文件,并搜索“你'。而且由于你还没有定义'y',所以会出现上述错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      相关资源
      最近更新 更多