Zanurkuj w Pythonie/Abstrakcyjne źródła wejścia: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Derbeth (dyskusja | edycje)
m deamerykanizacja pisowni
Fservant (dyskusja | edycje)
m Poprawionych kilka drobnych błędów stylistycznych
Linia 160:
 
# Funkcja <code>openAnything</code> przyjmuje pojedynczy argument, <code>source</code>, i zwraca ''obiekt plikopodobny''. <code>source</code> jest łańcuchem znaków o różnym charakterze. Może się odnosić do adresu URL (np. <code><nowiki>'http://slashdot.org/slashdot.rdf'</nowiki></code>), może być globalną lub lokalną ścieżką do pliku (np. <code>'binary.xml'</code>), czy też łańcuchem znaków przechowującym dokument XML, który ma zostać sparsowany.
# Najpierw sprawdzamy, czy <code>source</code> jest URL-em. Robimy to brutalnie: próbujemy otworzyć to jako URL i cicho pomijamy błędy spowodowane próbą otworzenia czegoś, co nie jest URL-em. Jest to właściwie eleganckie w tym sensie, że jeśli <code>urllib</code> będzie kiedyś obsługiwał nowe typy URL-i, nasz program także je obsłuży i to bez konieczności zmiany kodu. Jeśli <code>urllib</code> jest w stanie otworzyć <code>source</code>, to <code>return</code> wykopiespowoduje nasnatychmiastowe bezpośrednio zopuszczenie funkcji, ia poniższekolejne instrukcje <code>try</code> nie będązostaną nigdy wykonywanewykonane.
# WJeśli innym przypadku, gdyjednak <code>urllib</code> wrzasnąłnie nabył nasw istanie powiedział, żeotworzyć <code>source</code>, stwierdzając że nie jest ono poprawnym URL-em, zakładamy, że jest to ścieżka do pliku znajdującego się na dysku i próbujemy go otworzyć. Ponownie, nic nie robimy, by sprawdzić, czy <code>source</code> jest poprawną nazwą pliku (zasady określające poprawność nazwy pliku są znacząco różne na różnych platformach, dlatego prawdopodobnie i tak byśmy to źle zrobili). Zamiast tego, na ślepo otwieramy plik i cicho pomijamy wszystkie błędy.
# W tym miejscu zakładamy, że <code>source</code> jest łańcuchem znaków, który przechowuje dokument XML (ponieważ nic innego nie zadziałało), dlatego wykorzystujemy <code>StringIO</code>, aby utworzyć ''obiekt plikopodobny'' i zwracamy go. (Tak naprawdę, ponieważ wykorzystujemy funkcję <code>str</code>, <code>source</code> nie musi być nawet łańcuchem znaków; może być nawet dowolnym obiektem, awykorzystana z któregobowiem zostanie wykorzystana jego tekstowa reprezentacja, a która jest zdefiniowana przez specjalną metodę <code>__str__</code>.)
}}