Ich war nie völlig mit Pythons Ausnahme Zeug zufrieden. Es funktioniert gut in der Praxis, es ist die Theorie, die mich stört. :-) Vor allem, weil alles dynamisch ist, auch wenn Sie wissen, dass evil()
nur ZorgError
selbst auslöst und spam()
aufruft, was EggsError
auslöst, so dass Sie höchstens diese beiden Fehler von einem Anruf an evil()
bekommen, könnte jemand Dinge hinter Ihrem Rücken verpatzen und ändere das.
Das heißt, einige Dokumentation ist besser als andere. Zum Beispiel os.kill
kann offensichtlich OSError
erhöhen, wenn die kill
fehlschlägt, und TypeError
, wenn Sie es mit etwas anderes als zwei Ganzzahlen nennen, aber wussten Sie, dass es auch OverflowError
auslösen kann?
>>> os.kill(9999999999999, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: signed integer is greater than maximum
Wenn Sie versuchen, vernünftig kugelsicheren Code zu schreiben, Dinge wie zu Lesen hat eine pid-Datei und die Sonde, um zu sehen, ob ein Prozess ausgeführt wird, stellt sich heraus Sie diese OverflowError
falls fangen die pid in der PID-Datei ist eine ganze Zahl, aber ist außerhalb des Bereichs. Es wäre schön, wenn dies in der Dokumentation (ich fand es durch Folter-Tests statt.)
einfach alles zu kontrollieren (except:
oder except Exception
) ist in der Regel nicht geeignet, da es in der Regel zu viel fängt (einschließlich zB RuntimeError
aus ein Stapelüberlauf). Woher weißt du, was du fangen kannst? Ich denke, dass es schön sein könnte, wenn Blattfunktionen in Standardbibliotheken eine "Exceptions I Raise Direct" -Attribut- oder -Dokumentation-Anforderung haben, aber es ist einfach nicht da.
Edit: Ich oben in einem Kommentar darauf hingewiesen, dass die json Dokumentation ValueError
ausdrücklich erwähnt. Nicht explizit genannt, aber in Json's Selbsttests gefunden, sind UnicodeDecodeError
(was offensichtlich ist, sobald Sie darüber nachdenken) und AttributeError
(nicht so offensichtlich). Die Dokumentation erwähnt auch, dass Sie eine OverflowError
erhalten können.Wenn Sie json.dump
verwenden, die einen Stream zum Schreiben benötigt, können Sie natürlich auch alle Fehler des Streams erhalten. Dies ist der Grund, warum eine "Liste von Ausnahmen zorg()
direkt erhöht" nicht immer sehr nützlich ist.
Hinweis: In der Dokumentation wird auch 'ValueError' erwähnt. – torek