在Python 3.5中导入urllib

时间:2016-02-03 13:49:03

标签: python urllib

我有以下代码:

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

对于最后一行,PyCharm会显示警告:

  

在'__init __。py'

中找不到引用'request'

代码工作得很好,我收到服务器的回复我查询。

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

  

AttributeError:模块'urllib'没有属性'request'

有人可以向我解释

  1. 如何连接这两件事
  2. 为什么urllib.request.Request明显错误(?)尽管是documented here

2 个答案:

答案 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的情况下工作。