„Poproś o przebaczenie, a nie pozwolenie” - wyjaśnij

Nie pytam o osobiste „religijne” opinie na temat tej filozofii, raczej coś bardziej technicznego.

Rozumiem, że to wyrażenie jest jednym z kilku testów lakmusowych, aby sprawdzić, czy twój kod jest „pythonowy”. Ale dla mnie pythoniczny oznacza czysty, prosty i intuicyjny, nie załadowany programami obsługi wyjątków dla złego kodowania.

Więc praktyczny przykład. Definiuję klasę:

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

Teraz, wychodząc z tła proceduralnego, w innej funkcji chcę to zrobić:

if foo.bar:
    # do stuff

Otrzymam wyjątek atrybutu, jeśli będę niecierpliwy inie zrób początkowe foo = Brak. Więc „poproś o przebaczenie nie pozwolenie” sugeruje, że powinienem to zrobić zamiast tego?

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

Dlaczego lepiej byłoby dla mnie dodać dodatkową logikę w bloku try, żeby móc zostawić definicję klasybardziej niejednoznaczne? Dlaczego więc nie zdefiniować wszystkiego na początku, a więc wyraźniedać pozwolenie?

(Nie bij mnie z używania bloków try / except ... Używam ich wszędzie. Po prostu nie uważam, aby używać ich do łapania własnych błędów, ponieważ nie byłem dokładnym programistą.)

Lub ... czy całkowicie źle zrozumiałem mantrę „Zapytaj o przebaczenie”?

questionAnswers(8)

yourAnswerToTheQuestion