In einer anderen Frage schlug die akzeptierte Antwort vor, eine (sehr billige) if-Anweisung im Python-Code durch einen try / exception-Block zu ersetzen, um die Leistung zu verbessern.
Abgesehen von Problemen mit dem Codierungsstil und der Annahme, dass die Ausnahme niemals ausgelöst wird, wie viel Unterschied macht es (in Bezug auf die Leistung), einen Ausnahmebehandler zu haben, anstatt keinen zu haben, im Vergleich zu einer if-Anweisung, die mit Null verglichen wird?
Antworten:
Warum messen Sie es nicht mit dem
timeit
Modul ? Auf diese Weise können Sie sehen, ob es für Ihre Anwendung relevant ist.OK, also habe ich gerade Folgendes versucht:
Ergebnis:
Wie erwartet ist es also etwas schneller, keinen Ausnahmebehandler zu haben (aber in die Luft zu jagen, wenn die Ausnahme auftritt) und
try/except
schneller als ein expliziterif
, solange die Bedingung nicht erfüllt ist.Aber es ist alles in der gleichen Größenordnung und es ist unwahrscheinlich, dass es so oder so eine Rolle spielt. Nur wenn die Bedingung tatsächlich erfüllt ist, ist die
if
Version deutlich schneller.quelle
try/except
ist schneller alsif a != 0
Diese Frage wird tatsächlich in den FAQ zu Design und Verlauf beantwortet :
quelle
Diese Frage ist irreführend. Wenn Sie davon ausgehen, dass die Ausnahme niemals ist ausgelöst wird, der beiden Codes optimal.
Wenn Sie davon ausgehen, dass die Ausnahme als Teil einer Fehlerbedingung ausgelöst wird, sind Sie bereits außerhalb des Bereichs, in dem Sie optimalen Code wünschen (und Sie behandeln ihn wahrscheinlich sowieso nicht auf einer genau abgestimmten Ebene).
Wenn Sie die Ausnahme als Teil des Standardkontrollflusses verwenden - dies ist die pythonische Methode "Bitte um Vergebung, nicht um Erlaubnis" -, wird die Ausnahme ausgelöst, und die Kosten hängen von der Art der Ausnahme und der Art des Falls ab und wie viel Prozent der Zeit, in der Sie die Ausnahme schätzen, passiert.
quelle