我有這個命令檢查命令是否在Python中遇到了一些麻煩?
h = urllib.urlopen("http://google.com/")
我如何檢查是否它檢索我一些錯誤,網絡故障或一些我不期待?
例如,像
如果錯誤 打印 '錯誤'
謝謝你,因爲它是在Python 3.0去除
我有這個命令檢查命令是否在Python中遇到了一些麻煩?
h = urllib.urlopen("http://google.com/")
我如何檢查是否它檢索我一些錯誤,網絡故障或一些我不期待?
例如,像
如果錯誤 打印 '錯誤'
謝謝你,因爲它是在Python 3.0去除
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。
我相信錯誤時會引發異常。如果你捕捉到並使用錯誤代碼,你可以輕鬆地做適當的錯誤處理。
可能會發生異常,例如IOError
- 您可以使用異常處理來處理此問題。例如:
try:
h = urllib.urlopen("http://google.com/")
except IOError as e:
print "Error opening URL"
如果是不能夠做一些有意義的,它會引發異常,您可以與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就會這麼做。)
但是有沒有變量適用於所有可能的錯誤?例如IOError? – Shady 2010-04-30 16:28:18
@Shady:那麼你可以使用'except:'而不必提到要捕獲哪個異常。這將捕獲所有的例外,但應該避免。通常你應該總是指定你想要捕獲的*哪個*錯誤。 – 2010-04-30 17:53:27