"Bitte um Vergebung, nicht um Erlaubnis" - erkläre

Ich frage nicht nach persönlichen "religiösen" Meinungen zu dieser Philosophie, sondern nach etwas eher Technischem.

Ich verstehe, dass dieser Satz einer von mehreren Lackmustests ist, um festzustellen, ob Ihr Code "pythonisch" ist. Aber für mich bedeutet Pythonic klar, einfach und intuitiv, nicht mit Ausnahmehandlern für schlechte Codierung beladen.

Also, praktisches Beispiel. Ich definiere eine Klasse:

class foo(object):
    bar = None

    def __init__(self):
        # a million lines of code
        self.bar = "Spike is my favorite vampire."
        # a million more lines of code

Ausgehend von einem prozeduralen Hintergrund möchte ich dies in einer anderen Funktion tun:

if foo.bar:
    # do stuff

Ich werde eine Attributausnahme bekommen, wenn ich ungeduldig war undnicht mach das anfängliche foo = Keine. "Bitte um Verzeihung, nicht um Erlaubnis" schlägt also vor, dies stattdessen zu tun?

try:
    if foo.bar:
        # do stuff
except:
    # this runs because my other code was sloppy?

Warum ist es für mich besser, zusätzliche Logik in einen try-Block einzufügen, damit ich meine Klassendefinition verlassen kann?mehrdeutiger? Warum nicht alles zuerst definieren, deshalb explizitErlaubnis erteilen?

(Mach mich nicht fertig mit try / except-Blöcken ... Ich benutze sie überall. Ich denke nur nicht, dass es richtig ist, sie zu verwenden, um meine eigenen Fehler aufzufangen, weil ich kein gründlicher Programmierer war.)

Oder ... verstehe ich das Mantra "Ask Forgivess" völlig falsch?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage