web-dev-qa-db-ger.com

Python behandelt spezifische Fehlercodes?

Hey, ich frage mich, wie ich mit bestimmten Fehlercodes umgehen soll. Zum Beispiel [Errno 111] Connection refused

Ich möchte diesen spezifischen Fehler im Sockelmodul abfangen und etwas drucken.

22
AustinM

Wenn Sie den Fehlercode erhalten möchten, scheint dies der Trick zu sein.

import errno

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

Sie können nach errno Fehlercodes suchen.

33
Utku Zihnioglu

Zumindest auf Unix-Plattformen können Sie Folgendes tun.

import socket, errno
try:
    # Do something...
except socket.error as e:
    if e.errno == errno.ECONNREFUSED:
        # Handle the exception...
    else:
        raise

Verwenden Sie vor Python 2.6 e.args[ 0 ] anstelle von e.errno.

27
jchl

Ich entwickle unter Windows und befand mich in derselben Situation. Die Fehlermeldung enthält jedoch immer die Fehlernummer. Mit diesen Informationen konvertiere ich nur die Ausnahme in eine Zeichenfolge str(Exception), konvertiere den Fehlercode, den ich überprüfen möchte, in eine Zeichenfolge str(socket.errno.ERRORX) und prüfe, ob der Fehlercode in der Ausnahme enthalten ist.

Beispiel für eine Ausnahme beim Zurücksetzen der Verbindung:

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

Dies vermeidet länderspezifische Lösungen, ist aber leider immer noch nicht plattformunabhängig.

0