„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”?