在 Python 3.5 中导入 urllib

Importing urllib in Python 3.5

我有以下代码:

import urllib
import wget as wget
request = urllib.request.Request(url)

最后一行 PyCharm 显示警告:

Cannot find reference 'request' in '__init__.py'

虽然代码有效,但我收到了来自我查询的服务器的回复。

导入 import wget as wget 显示为未使用。当我删除该导入时,我在运行时遇到以下异常:

AttributeError: module 'urllib' has no attribute 'request'

谁能给我解释一下

  1. 这两件事是如何联系起来的
  2. 尽管 documented here 为什么 urllib.request.Request 显然是错误的(?)?

因为 request 是一个子模块,所以你必须写它的名字所以 Python 也会导入它

import urllib.request


推理:

如果您有一个包含许多子模块的模块,加载所有子模块可能是一件代价高昂的事情,并且可能会产生与您的程序无关的问题。

假设有一个名为 urllib.foo 的模块仅适用于 Windows,而您正在使用 Linux。如果导入系统要导入所有子模块,即使您不想使用它也可能会在您的系统上崩溃。

您正在使用的 wget 模块导入 urllib.request 以供其自身使用,因此 python 将缓存其导入并将成为 urllib 对象的一部分.

urllib 本身不导入 urllib.request。模块 wget 可能执行 import urllib.request。从那以后,urllib.request实际上是可参考的。

建议的解决方案:写入 import urllib.request,然后在没有 import wget 的情况下它应该可以工作。