2012-05-13 54 views
2

我已經完成了這一百萬次,但由於某種原因,我在嘗試使用urllib2時出現了一些奇怪的錯誤。我最近從Ubuntu 11.10升級到12.04。使用Python時奇怪的ImportError urllib2

代碼:

from urllib2 import urlopen 
urlopen('http://www.google.com').read() 

結果:

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    urlopen('http://www.google.com').read() 
    File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/usr/lib/python2.7/urllib2.py", line 400, in open 
    response = self._open(req, data) 
    File "/usr/lib/python2.7/urllib2.py", line 418, in _open 
    '_open', req) 
    File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain 
    result = func(*args) 
    File "/usr/lib/python2.7/urllib2.py", line 1207, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "/usr/lib/python2.7/urllib2.py", line 1146, in do_open 
    h = http_class(host, timeout=req.timeout) # will parse host:port 
    File "/home/nate/httplib.py", line 362, in __init__ 
ImportError: No module named appengine.api 

我使用的urllib時得到了類似的錯誤。任何想法可能會導致這種情況,以及如何解決這個問題?

回答

1

文件 「/home/nate/httplib.py」,線路362,

您的sys.path一個名爲httplib.py它試圖導入appengine.api。

將您的/home/nate/httplib.py重命名爲其他內容,因爲它會隱藏相同名稱的標準庫模塊。

+0

它不在PYTHONPATH中。它位於sys.path中的第一個當前目錄中。 – quantum

+0

是的。感謝修正@xiaomao。 – unutbu

3

看起來好像你有一個httplib.py覆蓋了標準模塊httplib。它正在嘗試導入不存在的Google App Engine相關庫。您需要將httplib.py重命名爲其他內容。

+0

非常感謝! – systemnate

0

我強烈建議你看看requests library。它使HTTP的工作變得輕而易舉。 「Python的標準urllib2模塊提供了你所需要的大部分HTTP功能,但是API被徹底打破了,它是爲不同的時間和不同的網絡而構建的,它需要大量的工作(甚至是方法重寫)執行最簡單的任務。「

+0

我一定會考慮這個。感謝您的建議! – systemnate

+0

雖然這是一個很好的建議,但它根本不回答問題。應該是一個評論imo。 – ThiefMaster