Python: Absturz mit Laufzeitfehler ist akzeptabel für den Allgemeinen Gebrauch?
Ist es akzeptabel, verwenden Sie den Absturz mit Laufzeitfehler Ausnahme für die Allgemeine Anwendung verwenden?
raise RuntimeError('config file is missing host address')
Habe ich einige code mit ein paar ein-aus-Situationen wie diese, und würde es vorziehen zu vermeiden, einmalige Ausnahme-Klassen für jeden von Ihnen. Alle Situationen sind fatal, und mein Ziel ist es, eine klare Botschaft an die Konsole. Im Grunde bin ich auf der Suche nach etwas ähnliches, um die veralteten
raise 'config file is missing host address'
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist... OK. Im Idealfall würde haben separate Ausnahmen für jeden halbwegs besonderen situation (z.B. einer Ausnahme für alle "die config-Datei ist ungültig" - Fehler, Wiederverwendung
FileNotFoundError
im 3.x für "die config-Datei existiert nicht", etc.). Aber das ist eine der harmlosen Formen technischer Schulden.Der Nachteil ist, dass, wenn Sie jemals tun, führen Sie diese getrennt von Ausnahmen, können Sie brauchen, um eine Unterklasse von
RuntimeError
aus Gründen der rückwärts-Kompatibilität. Das ist irgendwie hässlich, aber meist harmlos.RuntimeError
: EinRuntimeError
einfach bedeutet, dass einige Fehler, war nur nachweisbar, die zur Laufzeit statt, wenn die software konzipiert war: Ein Fehler aus den Händen der Entwickler. Dies steht im Gegensatz zu sagen, einTypeError
, wo unter sorgfältiger Analyse des Programmablaufs, sollten Sie in der Lage zu sehen, dass Sie tatsächlich mit einer Art unangemessen.RuntimeError
. Noch istValueError
,KeyError
usw., doch das sind alles vernünftigerweise mögliche zu Laufzeitfehlern. Absturz mit Laufzeitfehler ist weitgehend eine "Verschiedenes" bin, und ich möchte nicht verlängern.except Exception:
oder Sie sowieso nur ein Blick auf die traceback.except
.raise
es danach für code, der ausgeführt werden muss, wenn ein geschützter block läuft nicht bis zum Ende. Jedoch, diese Fälle sind oft besser gelöst mit einemwith
-Anweisung/context-manager oder einfinally:
- Klausel.assert
- Anweisung.assert False
an Orten, die sollten nie erreicht werden? Das scheint nicht wie eine benutzerfreundliche Fehlermeldung.python -O
).