[python] Trida pro IP adresu, vyjimky (bylo RE: Re: nevznik objektu)

Hynek Fabian hynek.fabian na firma.seznam.cz
Středa Březen 24 16:15:16 CET 2010


Přikryl Petr (středa 24 Březen 2010 13:41:50):
> Prakticky žádný jazyk neumožní korektní "nevznik"
> objektu -- pokud nedojde k nějaké nízkoúrovňové havárii.
Python to prakticky umožňuje, viz můj zřejmě zapadlý post 
o metodě __new__()
Volající _vždy_ dostane nějaké "jméno", ale protože v pythonu 
je toto jméno jen reference v nějakém jmenném prostoru, 
nic to neznamená. Klidně to může být reference na už 
existující objekt, například None.


> V tomto smyslu se přimlouvám za to, aby objetk třídy
> IP vznikl vždy, ale aby se bránil použití v případě,
> kdy má nepoužitelný obsah
Zajímavé, já bych to řešil přesně naopak. Pokud je objekt
v _nepoužitelném_ stavu, tak dříve nebo později nějaká výjimka
poletí, čili ji radši vystřelím hned. Chci mít backtrace vzniku,
ne důsledku.
"Ne-objekt" (resp. jiný, nevyžádaný objekt) bych vracel 
jen pokud by se to dalo považovat za _použitelný_ stav.
Třeba v nějakém volitelném inputu by se nezadaná IP adresa vyjádřila 
jako 0.0.0.0, špatně zadaná IP by vystřelila výjimku.
Čili když se jedná o funkčnost, ne o chybu.

Tak jako tak jsou to kosmetické detaily. Davidův dotaz se týkal
invalidních IP adres, a tam bych rozhodně střílel výjimky. 
Vrátit pahýl a následně ho porovnat na nenulovost by bylo hezké
zjednodušení, kdyby byl svět skutečně tak jednoduchý.
Ale časem přijde nějaký další chybový stav, další větev v IFu a pak
už to nebude o nic jednodušší než výjimka. A jak jsi zmínil, mnohem 
náchylnější na opomenutí.

BTW ještě mě teď napadl design, kdy by konstruktor vrátil(!) výjimku,
volající by si ji prohlédnul a podle přání buď nějak zpracoval
nebo raisnul. (zvednul? :-) 
Nenapadá mě žádný praktický důvod k něčemu tak krkolomnému, 
ale stojí myslím za zmínku že python unese i (ne)pěkné vylomeniny.


Další informace o konferenci Python