標準庫中的所有預期爲「通用」的異常都是內置的,並在庫參考的Built-in Exceptions部分有記錄。
在3.3,其包括這一個:
例外ConnectionError
用於連接相關的問題的基類。
子類是BrokenPipeError
,ConnectionAbortedError
,ConnectionRefusedError
和ConnectionResetError
。
但是這是一個內置的。所以這應該工作:
except ConnectionError:
在3.0-3.2,有是沒有這樣的例外,因爲ConnectionError
。 stdlib中沒有提到任何這個名字。所以嘗試處理它沒有意義。 (關於OSError
IOError
和是如何3.2和3.3之間重組的說明見PEP 3151。)
3.2當量的ConnectionError
是OSError
與某些errno
值。所以,你要的是一樣的東西:
except OSError as e:
if e.errno not in (EPIPE, ESHUTDOWN, ECONNABORTED, ECONNREFUSED, ECONNRESET):
raise
# whatever you wanted to do for ConnectionError.
同時,在將來,當你不知道你需要處理什麼樣的異常,這是很容易測試。首先,編寫一些測試代碼,通過記錄異常類型的限定名稱來處理任何異常。然後從日誌中取出該類型並在真實代碼中使用該類型。
try:
code_that_raises()
except Exception as e:
print(type(e), type(e).__qualname__, whatever_else_looks_useful(e))
看起來您正在使用請求?它的文檔位於http://docs.python-requests.org/en/latest/ – ninMonkey
我正在使用http.client.HTTPConnection – mafrasi2
您使用的是哪個Python版本?從'http.client.HTTPConnection'顯然是3.x.但是如果你在'ConnectionError'上得到一個'NameError',它不是3.2,3.3或3.4。 – abarnert