Die Prüfung für Timeout-Fehler in python

Also ich habe eine ziemlich generische logging-Anweisung verwendet, nachdem eine Anforderung:

try:
    r = requests.get(testUrl, timeout=10.0)
except Exception, err:
    logger.error({"message": err.message})

Dies funktioniert gut für alles, was ich habe geworfen, außer TimeoutError. Bei einer Zeitüberschreitung für die Anfrage des err ich wieder komme ist ein Tupel, der es versucht und scheitert, zu serialisieren.

Meine Frage ist, wie fange ich nur diese eine Art von Fehler? Für den Anfang TimeoutError ist nicht etwas, was ich Zugriff haben. Ich habe versucht, indem from exceptions import * aber mit kein Glück. Ich habe auch versucht den Import OSError weil die docs sagen TimeoutError ist eine Unterklasse, aber ich war nicht auf TimeoutError nach dem Import OSError.

TimeoutError docs

Plane ich entweder meine Liste von Ausnahmen in der Reihenfolge:

except TimeoutError, err:
     #handle this specific error
except Exception, err:
     #handle all other errors

oder einfach nur überprüfen, für Typ:

except Exception, err:
    if isinstance(err, TimeoutError):
        #handle specific error
    #handle all other errors

Python 2.7.3 & Django 1.5

TimeoutError ist eine benutzerdefinierte Ausnahme bereitgestellt von die requests - Paket.
Ahh, ich dachte, es war der, auf die hier verwiesen wird: docs.python.org/3/library/exceptions.html#TimeoutError
Wenn Sie Zweifel haben, drucken Sie die .__module__ Attribut eine Ausnahme.
Ich kam hier für TimeoutError aus concurrent.futures, die nur concurrent.futures.TimeoutError.
Es ist ein bulletin in Python 3, aber nicht in Python 2.

InformationsquelleAutor diplosaurus | 2014-06-13

Schreibe einen Kommentar