"Kann mir das jemand erklären?"
Kommt darauf an.
Hier ist eine Erklärung, aber sie ist nicht hilfreich. Ihre Frage rührt von Ihren Annahmen her. Da die reale Welt im Widerspruch zu Ihren Annahmen steht, muss das bedeuten, dass Ihre Annahmen falsch sind. Das ist keine gute Erklärung, aber deshalb fragst du ja.
"Ausnahmebehandlung bedeutet einen dynamischen Aufruf und eine statische Rückkehr, während eine if-Anweisung ein statischer Aufruf und eine statische Rückkehr ist."
Was bedeutet "dynamischer Aufruf"? Das Durchsuchen von Stack-Frames nach einem Handler? Ich nehme an, das ist es, was Sie meinen. Und ein "statischer Aufruf" ist das Auffinden des Blocks nach der if-Anweisung.
Vielleicht ist dieser "dynamische Aufruf" nicht der kostspieligste Teil des Vorgangs. Vielleicht ist die Auswertung des if-Ausdrucks etwas teurer als das einfachere "try-it-and-fail".
Es hat sich herausgestellt, dass die internen Integritätsprüfungen von Python fast dasselbe sind wie Ihre if-Anweisung, und dass sie sowieso durchgeführt werden müssen. Da Python immer prüft, ist Ihre if-Anweisung (meistens) überflüssig.
Sie können über die Behandlung von Ausnahmen auf niedriger Ebene lesen in http://docs.python.org/c-api/intro.html#exceptions .
bearbeiten
Mehr zur Sache: Die Debatte "wenn" oder "außer" spielt keine Rolle.
Da Ausnahmen billig sind, sollten Sie sie nicht als Leistungsproblem betrachten.
Verwenden Sie das, was Ihren Code ausmacht klar y sinnvoll . Verschwenden Sie keine Zeit mit Mikrooptimierungen wie dieser.
2 Stimmen
Verwandte Diskussion: stackoverflow.com/questions/204308/
8 Stimmen
+1 Für das Hinterfragen des Evangeliums, anstatt alles zu glauben, was man liest :)