2012-10-24 57 views
5

我導入了兩個庫urllibfrom urllib.request import urlopenpython urllib用法

第二個是包含在第一

當我走過去的代碼,並試圖刪除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() 
+1

'urllib2給 '導入錯誤:關於Python 2.7無模塊命名request'。 您使用的是哪個版本的Python? – utapyngo

回答

2

urllib包就是這樣一個包。這是__init__.py不導入urllib.request,因此您不能通過僅導入urllib簡單地達到urllib.request。它僅作爲命名空間使用。

改爲導入urllib.request

2

兩個import Xfrom X import Y執行任何模塊的進口或封裝X被給出。

在這種情況下,urllib是一個包。當你import urllib,那麼包本身被導入,並且你得到一個引用,但是沒有任何子模塊被導入(在這種情況下)。當您執行from urllib.request import ...時,Python實際上會導入整個模塊urllib.request,但會挑選出您請求的名稱併爲您提供參考。

如果你不使用urlopen,那麼你也可以很容易地做import urllib.request並得到相同的結果。

7

你混淆了python3包urllib.request與Python2.7一個是urllib2。請不要這樣做。 Python3和Python2庫是不同的。所有你可能需要爲從urllib.request裏進口urlopen` python2

import urllib2 
from urllib2 import Request 
req = Request("yoururl") 
res = urllib2.urlopen(req) 
+0

我認爲OP與標籤混淆了;如果他確實在使用Python 2.7,那麼會出現導入錯誤,而不是問題中提到的行爲。 –

+0

是的,沒錯。它被錯誤標記。 –

+0

好,我正在關注這個例子:http://www.nltk.org/book/ch03.html,我沒有意識到引用python3的例子。我的環境是Python 2.7。 +1投票,謝謝! – markc