Re: My Rock, Paper, Stone
Verfasst: Freitag 17. Dezember 2021, 22:47
Jain, also man kann statt ``assert condition, message`` auch ``if __debug__ and condition: raise AssertionError(message)`` schreiben, aber da sieht man auch gleich den Nachteil: es ist deutlich länger/mehr zu schreiben.
``assert`` und ``raise`` haben andere Einsatzgebiete. ``assert`` ist nur für Sachen wo ganz klar der *Programmierer* einen Fehler gemacht hat. Und da darf nichts stehen was den Programmzustand beeinflusst, weil ``assert`` auch global abgeschaltet werden kann. Auch wenn das in Python eigentlich niemand macht. In anderen Programmiersprachen ist das üblicher, insbesondere bei welchen die explizit kompiliert werden.
``assert`` ist nur für diese eine ganz bestimmte Art von Fehlern, wo man etwas prüft was eigentlich nie passieren dürfte. Das heisst auf Deutsch „Zusicherung“. Das ist für Programmzustände die nicht sein dürften, weil man davor entweder so programmiert hat, dass das ausgeschlossen ist, oder aber schon mit regulären Ausnahmen signalisiert hat, dass da was falsch war. ``assert`` ist beispielsweise nicht zum prüfen von Funktionsargumenten geeignet, denn da weiss man ja in der Regel nicht wer für falsche Werte verantwortlich ist.
``assert`` und ``raise`` haben andere Einsatzgebiete. ``assert`` ist nur für Sachen wo ganz klar der *Programmierer* einen Fehler gemacht hat. Und da darf nichts stehen was den Programmzustand beeinflusst, weil ``assert`` auch global abgeschaltet werden kann. Auch wenn das in Python eigentlich niemand macht. In anderen Programmiersprachen ist das üblicher, insbesondere bei welchen die explizit kompiliert werden.
``assert`` ist nur für diese eine ganz bestimmte Art von Fehlern, wo man etwas prüft was eigentlich nie passieren dürfte. Das heisst auf Deutsch „Zusicherung“. Das ist für Programmzustände die nicht sein dürften, weil man davor entweder so programmiert hat, dass das ausgeschlossen ist, oder aber schon mit regulären Ausnahmen signalisiert hat, dass da was falsch war. ``assert`` ist beispielsweise nicht zum prüfen von Funktionsargumenten geeignet, denn da weiss man ja in der Regel nicht wer für falsche Werte verantwortlich ist.