2011-07-24 63 views
3

我用下面的代碼,我想不通爲什麼它不加時的urlopen()未能例外..遇到問題提高異常的urllib2.urlopen()

在我的具體情況,我知道它爲什麼失敗..我的網址沒有http://在他們面前......但我想抓住這些情況,以便腳本可以繼續運行我的代碼而不是退出。

req = urllib2.Request(link) 
    try: 
     url = urllib2.urlopen(req) 
    except urllib2.URLError, e: 
     print e.code 
     print e.read() 
     return False 

和我得到..

Traceback (most recent call last): 
File "./getURLs.py", line 141, in <module> 
main() 
File "./getURLs.py", line 82, in main 
Process(args).get_children() 
File "./getURLs.py", line 65, in get_children 
self.get_links(link) 
File "./getURLs.py", line 46, in get_links 
data = urllib2.urlopen(req) 
File "/usr/local/lib/python2.7/urllib2.py", line 126, in urlopen 
return _opener.open(url, data, timeout) 
File "/usr/local/lib/python2.7/urllib2.py", line 383, in open 
protocol = req.get_type() 
File "/usr/local/lib/python2.7/urllib2.py", line 244, in get_type 
raise ValueError, "unknown url type: %s" % self.__original 
ValueError: unknown url type:/

。 。 。

解決方案

任何人在我的特定解決方案的興致..我用下面的捕捉兩個異常。

req = urllib2.Request(link) 
    try: 
     url = urllib2.urlopen(req) 
    except (ValueError,urllib2.URLError) as e: 
     print e 
     return False 
+0

謝謝!正是我需要的! –

回答

6

從你粘貼的東西看來,你看起來像是在捕捉錯誤類型的異常。該代碼應該說

try: 
    url=urllib2.urlopen(req) 
except ValueError: 
    # etc etc etc. 

如果它的關鍵,你的代碼運行的全部,你還可以有除了普通:具有未指定的異常類型,甚至最後。請參閱:http://docs.python.org/tutorial/errors.html