Frage

Für einen Block wie folgt aus:

try:
    #some stuff
except Exception:
    pass

Pylint wirft W0703 'Catch "Exception"' Warnung. Warum?

War es hilfreich?

Lösung

Es ist gute Praxis berücksichtigt normalerweise nicht die Wurzel Exception-Objekt zu fangen, sondern speziellere zu fangen - zum Beispiel IOException

.

überlegen Sie, ob ein aus der Erinnerung Ausnahme aufgetreten -. Einfach mit „pass“ gehen wird Ihr Programm nicht in einem guten Zustand verlassen

So ziemlich das einzige Mal, wenn Sie Ausnahme ist auf der obersten Ebene des Programms fangen sollte, wo man (versuchen) log es, einen Fehler an, und beenden so elegant wie möglich.

Andere Tipps

Es ist gut, Praxis nur einen sehr engen Bereich von Arten zu fangen. ‚Exception‘ ist zu allgemein - Sie fangen am Ende nicht nur die Fehler, die Sie geplant, aber auch andere Fehler zu, die Fehler in Ihrem Code maskieren kann, die schneller sein würde, zu diagnostizieren, wenn sie nicht überhaupt gefangen wurden, oder vielleicht würde besser durch einen einzelnen sehr hohes Niveau Exception-Handler behandelt werden.

Having said that, da python2.6, fangen Ausnahme viel vernünftiger geworden ist, weil alle Ausnahmen, die Sie sich nicht fangen wollen (Systemexit, KeyboardInterrupt) nicht mehr von Exception erben. Sie erben stattdessen von einem gemeinsamen BaseException statt. Dies wurde absichtlich getan, um zu machen Ausnahme relativ harmlos zu kontrollieren, da es eine solche gemeinsame Idiom ist.

Siehe

PEP 3110 für Details und Pläne für die Zukunft.

, weil es denkt, dass Sie zu viel sind zu kontrollieren. und es ist richtig.

Ausnahme angehoben werden, wenn etwas ... Ausnahme auftritt. Es ist generell eine gute Sache, dass das Programm beendet wird.

Sie können einige Ausnahmen ignorieren, aber IMO gibt es keinen guten Grund für eine Basis-Klasse wie das zu kontrollieren.

wie Gregs Antwort, ‚Exception‘ ist eine Basisklasse und Ausnahmen sollten von dieser Klasse abgeleitet werden, siehe auch exceptions.Exception .

Hier ist ein sehr nützliches Liste der Fehler in der pydocs

Beachten Sie auch das sehr praktisch Zurückverfolgungsmodul, das Sie herausfinden kann, wo die Ausnahme aufgetreten. Mit nur ‚außer: ...‘ zeigt Ihnen, welche Fehler sollten Sie am besten den Einsatz in Ihrem Fall. Zum Beispiel, versuchen Sie diesen Code (drücken Sie den Kommentar), vielleicht werden Sie sie akzeptieren:

import traceback
#absent = 'nothing'
try:
    something = absent
except  NameError:
    traceback.print_exc()
else:
    print("you get here only when you uncomment 'absent'") 

Ausnahme Fangen (ohne Re-raising) hat zwei wirklich schlechte Nebenwirkungen: Fehler gefressen, so dass Sie verlieren den Stack-Trace, sondern auch, dass die Strg-C (oder was auch immer die Pause-Taste auf Ihrem Betriebssystem) wird auch behandelt hier.

Das typische Verhalten von Programmen wie dieser ist, dass sie entweder nicht gestoppt werden können, oder dass ctrl-c bewirkt, dass der Steuerfluss vorwärts überspringen (zum Exception-Handler) und dann weiter. Dann ist entweder der Code kann nicht unterbrochen werden, oder Sie müssen auf ctrl-c hämmern, um es zu stoppen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top