2010-04-30 80 views

回答

10

urllib.urlopen已被棄用。改爲使用urllib2.urlopen,並在文檔中提到:

對錯誤引發URLError

所以做:

try: 
    h = urllib2.urlopen("http://google.com/") 
except urllib2.URLError as e: 
    # do something with the exception e.g. 
    print 'Error:', e.reason 

或只是一個(無意義的)錯誤消息:

try: 
    h = urllib2.urlopen("http://google.com/") 
except urllib2.URLError: 
    print 'An error occurred.' 

URLError

例外? n urllib2.URLError

處理程序在遇到問題時引發此異常(或派生異常)。它是IOError的一個子類。

原因
此錯誤的原因。它可以是消息字符串或其他異常實例(遠程URL爲socket.error,本地URL爲OSError)。


你可能想了解Errors and Exceptions

+0

但是有沒有變量適用於所有可能的錯誤?例如IOError? – Shady 2010-04-30 16:28:18

+2

@Shady:那麼你可以使用'except:'而不必提到要捕獲哪個異常。這將捕獲所有的例外,但應該避免。通常你應該總是指定你想要捕獲的*哪個*錯誤。 – 2010-04-30 17:53:27

0

我相信錯誤時會引發異常。如果你捕捉到並使用錯誤代碼,你可以輕鬆地做適當的錯誤處理。

1

可能會發生異常,例如IOError - 您可以使用異常處理來處理此問題。例如:

try: 
    h = urllib.urlopen("http://google.com/") 
except IOError as e:      
    print "Error opening URL" 
3
  • 如果是不能夠做一些有意義的,它會引發異常,您可以與try/except接受。

  • urllib.urlopen已棄用urllib2.urlopen

    >>> import urllib2 
    >>> urllib2.urlopen('not a valid URL') 
    Traceback (most recent call last): 
        File "<stdin>", line 1, in <module> 
        ... 
    ValueError: unknown url type: not a valid URL 
    >>> 
    >>> urllib2.urlopen("http://thiswebsitedoesntexistq.com") 
    Traceback (most recent call last): 
        File "<stdin>", line 1, in <module> 
        ... 
    urllib2.HTTPError: HTTP Error 404: Not Found 
    >>> 
    >>> # URLError is the parent class for the errors raised by urlopen 
    ... # if it can parse the URL 
    ... 
    >>> issubclass(urllib2.HTTPError, urllib2.URLError) 
    True 
    

我能趕上這些像

try: 
    urllib2.urlopen(some_url) 
except ValueError: 
    print "Not a real URL" 
except urllib2.HTTPError: 
    print "%s does not exist" % (some_url,) 

或者我可以讓,如果我沒有有一些理智的方式來反應他們傳播。 (通常人們想要捕捉一個錯誤,以便他們能夠打印錯誤並關閉他們的程序,這通常很愚蠢,因爲如果你沒有捕捉並修復錯誤,那麼Python就會這麼做。)

相關問題