我有以下代码:
import urllib
import wget as wget
request = urllib.request.Request(url)
对于最后一行,PyCharm会显示警告:
在'__init __。py'
中找不到引用'request'
代码工作得很好,我收到服务器的回复我查询。
导入import wget as wget
显示为未使用。当我删除该导入时,我在运行时收到以下异常:
AttributeError:模块'urllib'没有属性'request'
有人可以向我解释
urllib.request.Request
明显错误(?)尽管是documented here?答案 0 :(得分:1)
因为request是一个子模块,你必须写它的名字,所以Python也会导入它
import urllib.request
推理:
如果你有一个包含许多子模块的模块,那么加载所有子模块可能是一件昂贵的事情,并且可能会产生与你的程序无关的问题。
想象一下,有一个名为urllib.foo
的模块仅适用于Windows,而您正在使用Linux。如果导入系统要导入所有子模块,即使您不想使用它,系统也可能会崩溃。
您正在使用的wget
模块导入urllib.request
以用于自身,因此python将缓存其导入,它将成为urllib
对象的一部分。
答案 1 :(得分:1)
urllib
本身不会导入urllib.request
。模块wget
可能会执行import urllib.request
。从那以后,urllib.request
实际上是可引用的。
建议的解决方案:写import urllib.request
,然后它应该在没有import wget
的情况下工作。