「一般的に使用できる」と予想される標準ライブラリのすべての例外は組み込みであり、ライブラリ リファレンスの組み込み例外の部分に記載されています。
3.3 では、次のものが含まれます。
例外 ConnectionError
接続関連の問題の基本クラス。
サブクラスはBrokenPipeError
、ConnectionAbortedError
、ConnectionRefusedError
およびConnectionResetError
です。
しかし、これはビルトインです。したがって、これは機能するはずです:
except ConnectionError:
3.0-3.2 では、のような例外はありConnectionError
ません。stdlib には、その名前のものは何も発生しません。したがって、それを処理しようとしても意味がありません。( と が 3.2 と 3.3 の間で再編成された方法の説明については、PEP 3151 を参照してください。 )OSError
IOError
3.2 に相当するConnectionError
isOSError
には特定の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))