web-dev-qa-db-ja.com

Python特定のエラーコードを処理しますか?

ちょっと特定のエラーコードを処理する方法について疑問に思っています。例えば、 [Errno 111] Connection refused

この特定のエラーをソケットモジュールでキャッチして、何かを出力したいと思います。

26
AustinM

エラーコードを取得する場合は、これでうまくいくようです。

import errno

try:
    socket_connection()
except socket.error as error:
    if error.errno == errno.ECONNREFUSED:
        print(os.strerror(error.errno))
    else:
        raise

errnoエラーコード を検索できます。

37
Utku Zihnioglu

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

27
jchl

私はWindowsで開発をしていますが、同じ苦境に陥っています。ただし、エラーメッセージには常にエラー番号が含まれています。その情報を使用して、例外を文字列str(Exception)に変換し、チェックしたいエラーコードを文字列str(socket.errno.ERRORX)に変換し、エラーコードが例外にあるかどうかを確認します。

接続リセット例外の例:

except Exception as errorMessage:
    if str(socket.errno.ECONNRESET) in str(errorMessage):
        print("Connection reset")
        #etc...

これにより、ロケール固有のソリューションは回避されますが、残念ながらプラットフォームに依存しません。

0