In Python dienen Ausnahmen dazu, Fehler oder außergewöhnliche Bedingungen während der Programmausführung zu signalisieren. Um manuell eine Ausnahme auszulösen, wird die raise-Anweisung verwendet.
Um eine Ausnahme auszulösen, verwenden Sie den Konstruktor für die spezifische Ausnahmeklasse, die Ihr Problem am besten beschreibt. Zum Beispiel:
raise ValueError('A very specific bad thing happened.')
Dadurch können Sie eine individuelle Fehlermeldung bereitstellen, die es einfacher macht, den Täter zu identifizieren.
Verzichten Sie auf die Angabe von generischen Fehlern Ausnahmen wie Exception. Diese werden schwieriger abzufangen, da Sie auch alle untergeordneten, spezifischeren Ausnahmen abfangen müssen.
Verwenden Sie die raise-Anweisung mit dem spezifischsten Ausnahmekonstruktor, den es gibt passt zu deiner Situation. Sie können dem Konstruktor auch Argumente übergeben:
raise ValueError('A very specific bad thing happened', 'foo', 'bar', 'baz')
Diese Argumente können mit dem args-Attribut des Exception-Objekts abgerufen werden.
Bei der Behandlung von Ausnahmen möchten Sie möglicherweise bestimmte Fehler protokollieren und erneut auslösen. Behalten Sie den Stack-Trace bei, indem Sie eine Bare-Raise-Anweisung verwenden:
logger = logging.getLogger(__name__) try: do_something_in_app_that_breaks_easily() except AppError as error: logger.error(error) raise # just this! # raise AppError # Don't do this, you'll lose the stack trace!
Während es möglich ist, Fehler mit sys.exc_info() zu ändern, bevorzugen Sie zum Beibehalten einen Bare-Raise der Stacktrace. Dies kann besonders problematisch sein, wenn Threading verwendet wird, da Sie möglicherweise den falschen Traceback erfassen.
In Python 3 können Sie Ausnahmen verketten, um Tracebacks beizubehalten:
raise RuntimeError('specific message') from error
Vermeiden Sie Folgendes, da sie Fehler oder Fehler stillschweigend erkennen und verbergen können sogar stillschweigend die falsche Ausnahme auslösen:
raise ValueError, 'message' # Deprecated raise 'message' # Seriously wrong, don't do this
Ein Beispiel für das Auslösen einer Ausnahme wegen falscher API-Nutzung:
def api_func(foo): '''foo should be either 'baz' or 'bar'. returns something very useful.''' if foo not in _ALLOWED_ARGS: raise ValueError('{foo} wrong, use "baz" or "bar"'.format(foo=repr(foo)))
Sie können benutzerdefinierte Fehlertypen definieren, um bestimmte anwendungsbezogene Fehler anzuzeigen:
class MyAppLookupError(LookupError): '''raise this when there's a lookup error for my app'''
Das obige ist der detaillierte Inhalt vonWie kann ich in Python effektiv Ausnahmen auslösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!