7

In einer Sprache, die Ausnahmen verwendet, um Fehler zu signalisieren, möchte ich einen Code von Drittanbietern aufrufen und, falls dies fehlschlägt, den Fallback-Code ausführen. Zum Beispiel:Wie kann man Drittanbieter-Code in Ausnahmefällen robust aufrufen?

try: 
    result = third_party.fast_calculation() 
catch: 
    result = slower_calculation() 

Nach meiner Erfahrung ist es sehr selten, alle Ausnahmen zu kennen, die von dem Code von Drittanbietern geworfen werden konnten. Daher kann ich diese Ausnahmen nicht in der catch Klausel aufführen. Auf der anderen Seite wird mir häufig empfohlen, keine mögliche Ausnahme zu catch.

Wie sollte ich die catch Klausel in dieser Situation schreiben?

Antwort

1

Sie sollten spezifische Ausnahmetypen nur dann abfangen, wenn Sie eine bestimmte Möglichkeit haben, mit diesen umzugehen. Sie können (und sollten) so viele spezifische Ausnahmetypen wie nötig in der am besten geeigneten Reihenfolge abfangen.

Wenn Sie nur jede Ausnahme auf die gleiche Weise behandeln möchten, glaube ich, dass Ihr aktueller, untypisierter Fang so gut ist wie es geht. Das eigentliche Problem, IMO, tritt auf, wenn Sie einen leeren Catch verlassen, da der Client-Code nicht wissen kann, ob die Funktion tatsächlich das getan hat, was sie tun sollte.

0

Überprüfen Sie zunächst, ob Ihr Drittanbietercode tatsächlich Ausnahmen auslöst. Es darf nicht.

Zweitens, überprüfen Sie die zurückgegebenen Ergebnisse, wenn keine Ausnahme durch den Drittanbieter-Code ausgelöst wird. Ein Statuswert kann zurückgegeben werden, um anzuzeigen, ob ein erfolgreiches Ergebnis erreicht wurde. Wenn dies der Fall ist, kann eine Statusüberprüfung erforderlich sein, um festzustellen, ob Wiederherstellungsaktionen (z. B. die "langsamere_Berechnung" -Methode) nach einem schlechten Rückgabestatus benötigt werden.