Weil es furchtbar unspezifisch ist und es Ihnen nicht ermöglicht, etwas Interessantes mit Ausnahme zu machen. Außerdem, wenn Sie jede Ausnahme abfangen, könnte es viele Ausnahmen geben, die passieren, von denen Sie nicht einmal wissen, dass sie passieren (was dazu führen könnte, dass Ihre Anwendung fehlschlägt, ohne dass Sie wirklich wissen, warum). Sie sollten in der Lage sein (entweder durch das Lesen von Dokumentationen oder Experimenten) genau vorauszusagen, welche Ausnahmen Sie behandeln müssen und wie Sie damit umgehen sollen, aber wenn Sie blind alle von Anfang an unterdrücken, werden Sie es nie erfahren.
Also, auf vielfachen Wunsch, hier ist ein Beispiel. Ein Programmierer schreibt Python-Code und sie bekommt eine IOError
. Statt weiter zu untersuchen, beschließt sie, alle Ausnahmen zu fangen:
def foo():
try:
f = open("file.txt")
lines = f.readlines()
return lines[0]
except:
return None
Sie das Problem nicht in seiner Art nicht klar: was ist, wenn die Datei vorhanden ist und zugänglich ist, aber es ist leer? Dann wird dieser Code eine IndexError
auslösen (da die Liste lines
leer ist). Also wird sie Stunden damit verbringen, sich zu fragen, warum sie None
von dieser Funktion zurückbekommt, wenn die Datei existiert und nicht gesperrt wird, ohne etwas zu bemerken, das offensichtlich wäre, wenn sie Fehler genauer abgefangen hätte, was bedeutet, dass sie auf Daten zugreift, die das nicht tun existieren.
Muss ich fangen ‚em all – jamylak
Ich denke, es ist besser, alles in einem Produktionscode zu fangen, aber da die Software entwickelt wird, könnte es Ihr Code schwer für die Fehlersuche machen .... –
@jamylak: http: //stephenvick.wordpress.com/2010/08/02/pokemon-exception-handling/ –