Zanurkuj w Pythonie/Wprowadzanie do dialect.py: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Derbeth (dyskusja | edycje)
m kosmetyka
Usunąłem nadmiarową literkę doe -> do
Linia 53:
# Metoda <code>getattr</code> rzuca wyjątek <code>AttributeError</code>, jeśli metoda, której szuka nie istnieje w danym obiekcie (oraz w żadnym z jego potomków), ale to jest w porządku, ponieważ wywołanie <code>getattr</code> zostało otoczone blokiem <code>try...except</code> i wyjątek <code>AttributeError</code> zostaje przechwycony.
# Ponieważ nie znaleźliśmy metody <code>start_xxx</code>, sprawdzamy jeszcze metodę <code>do_xxx</code> zanim się poddamy. Ta alternatywna grupa metod generalnie służy do obsługi znaczników samodzielnych, jak np. <code><nowiki><br></nowiki></code>, które nie mają znacznika końcowego. Jednak możemy używać metod z obu grup. Jak widać <code>SGMLParser</code> sprawdza obie grupy dla każdego znacznika. (Jednak nie powinieneś definiować obu metod obsługi <code>start_xxx</code> i <code>do_xxx</code> dla tego samego znacznika; wtedy i tak zostanie wywołana tylko <code>start_xxx</code>.)
# Następny wyjątek <code>AttributeError</code>, który oznacza, że kolejne wywołanie <code>getattr</code> odnoszące się doedo <code>do_xxx</code> także zawiodło. Ponieważ nie znaleźliśmy ani metody <code>start_xxx</code>, ani <code>do_xxx</code> dla tego znacznika, przechwytujemy wyjątek i wycofujemy się do metody domyślnej <code>unknown_starttag</code>.
# Pamiętajmy, bloki <code>try...except</code> mogą mieć także klauzulę <code>else</code>, która jest wywoływana jeśli nie wystąpi żaden wyjątek wewnątrz bloku <code>try...except</code>. Logiczne, to oznacza, że znaleźliśmy metodę <code>do_xxx</code> dla tego znacznika, a więc wywołujemy ją.
# A tak przy okazji nie przejmuj się tymi różnymi zwracanymi wartościami; teoretycznie one coś oznaczają, ale w praktyce nie są wykorzystywane. Nie martw się także tym <code>self.stack.append(tag)</code>; <code>SGMLParser</code> śledzi samodzielnie, czy znaczniki początkowe są zrównoważone z odpowiednimi znacznikami końcowymi, ale jednocześnie do niczego tej informacji nie wykorzystuje. Teoretycznie moglibyśmy wykorzystać ten moduł do sprawdzania, czy znaczniki są całkowicie zrównoważone, ale prawdopodobnie nie warto i wykracza to poza zakres tego rozdziału. W tej chwili masz lepsze powody do zmartwienia.