414 Stimmen

Warum ist "außer: pass" eine schlechte Programmierpraxis?

Ich sehe oft Kommentare zu anderen Stack Overflow Fragen, die darauf hinweisen, dass die Verwendung von except: pass nicht empfohlen wird. Warum ist das schlecht? Manchmal ist es mir einfach egal, welche Fehler auftreten und ich möchte einfach nur den Code weiter ausführen.

try:
    something
except:
    pass

Warum ist es schlecht, einen except: pass Block zu verwenden? Was macht es schlecht? Liegt es daran, dass ich einen Fehler einfach ignoriere oder dass ich jeglichen Fehler abfange?

2voto

Wenn es eine schlechte Praxis wäre, wäre "pass" keine Option. Wenn Sie ein Asset haben, das Informationen aus vielen Quellen empfängt, z. B. ein Formular oder Benutzereingabe, ist es sehr nützlich.

variable = False
try:
    if request.form['variable'] == '1':
       variable = True
except:
    pass

2voto

OnceUponATime Punkte 460

Ich persönlich bevorzuge diese Lösung:

except ValueError as error:
                print(error.args)
                pass

error.args gibt mir eine Einzeiler, die nicht zu ablenkend ist, aber wirklich bei der Code-Überprüfung hilft, besonders wenn es verschiedene Gründe für die Fehler gibt, wie zum Beispiel

(ValueError('Jahr 0 ist außerhalb des Bereichs'),)
(ValueError('Monat muss zwischen 1 und 12 liegen'),)
(ValueError('Tag ist außerhalb des Bereichs für den Monat'),)

bei der Arbeit mit Zeitperioden in pandas.

1voto

Jeff Silverman Punkte 644

Ich baue eine Anwendung, die in einem Rechenzentrum ausgeführt wird. Es sollte keine Fehler generieren oder Ausnahmen auslösen. Mein Rechenzentrum verfügt über ein Netzwerküberwachungssystem, das einen SNMP-Trap-Empfänger enthält.

versuchen:
    main()
außer als e:
    log(str(e))
    send_snmp_trap(str(e))
    raise

außer dass raise nicht irgendwohin gehen wird, weil es am Ende eines eventuellen verbleibenden Stapels steht.

Übrigens, dies ist keineswegs ein Allheilmittel. Es gibt einige Ausnahmen, die nicht abgefangen werden können. SNMP garantiert keine Lieferung. Die Ergebnisse können variieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X