azurIt píše v Čt 18. 03. 2010 v 20:35 +0100: > >musím přiznat, že řešení pomocí výjimek mně přijde jako s kanonem na > >vrabce, ikdyž to má svoji logiku. Pokud vnímám výjimku jako nějakou > >zásadně chybovou situaci, tak to do této věci nesedí, protože s chybným > >vstupem se má počítat a kód by ho měl ošetřovat. > > > S tymto absolutne nesuhlasim. Ak hovoris o nejakom peknom osetreni chybneho > vstupu (typu vypisanie chybovej spravy), tak toto _absolutne_ nie je ulohou > funkcie ci objektu, ale konecnej aplikacie, ktora bude danu funkciu/objekt > pouzivat. Osetrenie vstupu je samozrejme nutnost ale nie tymto sposobom - > proste staci urobit aby funkcia 'zhucala' a nesnazila sa pokracovat (a > pripadne nieco pokazit). Vynimka je na toto priamo stvorena. >
Takže ti spadne celá aplikace. OK, s tím se dá počítat, pokud je to jednouživatelská aplikace. Ale co když jde o nějakou třeba webovou službu? > > > > > >Možná jsem prostě jenom příliš staromódní, začínal jsem programovat v > >jazycích, kde výjimky nebyly a python je jazyk, kde se výjimky dají > >používat téměř jako lék na cokoliv. > > > >> - nevolat konstruktor (tedy nevytvářet objekt), ale volat funkci, > >> která sama vytvoří objekt, nebo vrátí None - podle mě nejlepší řešení > > > >To zní zajímavě, ale moc mně to nezapadá do takového toho "objektového" > >pohledu na svět. Nutno přiznat, že je to asi celkem jedno, z venku > >modulu to vypadá stejně jako přímo ten konstruktor objektu. > > > >> - vytvořit objekt, který při porovnání s False vrátí True (lze > >> implementovat přetížením/vytvořením metody __nonzero__) > > > >Tak o __nonzero__ jsem nevěděl. zajímavé. > > > >> > >> BTW. počítáš i s IPv6, že jo? :) > > > >Ne :-) není správně podporován na druhé straně. > > > >D. > > > > > >> > >> Petr Messner > >> > >> > >> 2010/3/18 David Rohleder <[email protected]>: > >> > Ahoj, > >> > > >> > je možné, aby nevznikl objekt, který zrovna vytvářím? Příklad - mám > >> > třídu typu IP adresa, v konstruktoru předávám řetězec IPadresy. Chtěl > >> > bych, aby v případě, že IP adresa není validní, objekt vůbec nevznikl. > >> > Tj. aby konstruktor vrátil None: > >> > > >> >>>> ipaddr = IP("192.1023.neco.1") > >> >>>> ipaddr > >> > None > >> > > >> > chtěl jsem pak třeba udělat: > >> > > >> > if not ipaddr: > >> > print "zadavas blby vstup" > >> > > >> > > >> > > >> > chtěl jsem to vyřešit asi takto: > >> > > >> > class IP(object): > >> > def __init__(self, IPadresa): > >> > ..... > >> > if chyba: return None > >> > > >> > > >> > > >> > Jenomže konstruktor vrací vždycky None, tj. touto cestou to nejde. > >> > > >> > Zatím jediné, co mne napadlo, je vyřešit to pomocí výjimky, tj.např > >> > > >> > try: > >> > ipaddr = IP("192.168.34536.45") > >> > except ValueError: > >> > ipaddr = None > >> > > >> > Ale myslím, že kdyby objekt vůbec nevznikl, tak by to bylo lepší. Jde > >> > to, nebo to nejde? > >> > > >> > D. > >> > > >> > > >> > -- > >> > David Rohleder <[email protected]> > >> > > >> > _______________________________________________ > >> > Python mailing list > >> > [email protected] > >> > http://www.py.cz/mailman/listinfo/python > >> > > >> _______________________________________________ > >> Python mailing list > >> [email protected] > >> http://www.py.cz/mailman/listinfo/python > > > >_______________________________________________ > >Python mailing list > >[email protected] > >http://www.py.cz/mailman/listinfo/python > _______________________________________________ > Python mailing list > [email protected] > http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
