5

我导入了两个库urllibfrom urllib.request import urlopen.

第二个包含在第一个中

当我查看代码并尝试删除该from urllib.request import urlopen行时,我收到了以下消息:

opnerHTMLnum = urllib.request.build_opener()
AttributeError: 'module' object has no attribute 'request'

当我恢复from urllib.request import urlopen代码运行的行时。

谁能解释为什么?

import re
#import http.cookiejar
import os.path
#import time
#import urllib3
import urllib
from urllib.request import urlopen
import sys
import smtplib
from email.mime.text import MIMEText

# ...

    opnerHTMLnum = urllib.request.build_opener()
4

3 回答 3

7

You are confusing python3 package urllib.request with Python2.7 one which is urllib2. Please don't do that. Python3 and Python2 are libraries are different. All you may want is urllib2 from python2

import urllib2
from urllib2 import Request
req = Request("yoururl")
res = urllib2.urlopen(req)
于 2012-10-24T16:13:29.893 回答
2

urllib就是这样,一个包。它__init__.py不导入urllib.request,因此您不能仅urllib.request通过导入urllib. 它仅用作名称空间。

urllib.request改为导入。

于 2012-10-24T16:11:55.417 回答
2

两者import Xfrom X import Y执行X给定的任何模块或包的导入。

在这种情况下,urllib是一个包。当 you 时import urllib,包本身会被导入,并且你会得到对它的引用,但不会导入任何子模块(在这种情况下)。当您这样做时from urllib.request import ...,Python 实际上会导入整个模块urllib.request,但随后会挑选出您要求的名称并为您提供对它们的引用。

如果您不使用urlopen,那么您也可以轻松完成import urllib.request并获得相同的结果。

于 2012-10-24T16:12:58.507 回答