ちょっと特定のエラーコードを処理する方法について疑問に思っています。例えば、 [Errno 111] Connection refused
この特定のエラーをソケットモジュールでキャッチして、何かを出力したいと思います。
エラーコードを取得する場合は、これでうまくいくようです。
import errno
try:
socket_connection()
except socket.error as error:
if error.errno == errno.ECONNREFUSED:
print(os.strerror(error.errno))
else:
raise
errno
エラーコード を検索できます。
Unixプラットフォームでは、少なくとも次のことができます。
import socket, errno
try:
# Do something...
except socket.error as e:
if e.errno == errno.ECONNREFUSED:
# Handle the exception...
else:
raise
Python 2.6の前に、e.args[ 0 ]
の代わりに e.errno
。
私はWindowsで開発をしていますが、同じ苦境に陥っています。ただし、エラーメッセージには常にエラー番号が含まれています。その情報を使用して、例外を文字列str(Exception)
に変換し、チェックしたいエラーコードを文字列str(socket.errno.ERRORX)
に変換し、エラーコードが例外にあるかどうかを確認します。
接続リセット例外の例:
except Exception as errorMessage:
if str(socket.errno.ECONNRESET) in str(errorMessage):
print("Connection reset")
#etc...
これにより、ロケール固有のソリューションは回避されますが、残念ながらプラットフォームに依存しません。