在 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'
谁能给我解释一下
- 这两件事是如何联系起来的
- 尽管 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
的情况下它应该可以工作。
我有以下代码:
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'
谁能给我解释一下
- 这两件事是如何联系起来的
- 尽管 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
的情况下它应该可以工作。