>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?
Aplikacia ti spadne len ak neosetris vynimku, ktoru vyvola dany objekt - ved to tam pisem, vynimky mas osetrit na urovni aplikacie, chybove spravy nepatria do objektov. A prepac ale s tym vratenim None miesto objektu mi to prijde ako kravina :) Proste nerob: ipaddr = IP("192.1023.neco.1") if not ipaddr: print "nieco sa niekde pokazilo ale bohuzial neviem co" ale: try: ipaddr = IP("192.1023.neco.1") except ... : print "neplatna IP" except ... : print "neplatny port" except ... : print "neplatne nieco dalsie" else: print "ok" > >> >> >> > >> >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 <da...@ics.muni.cz>: >> >> > 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 <da...@ics.muni.cz> >> >> > >> >> > _______________________________________________ >> >> > Python mailing list >> >> > Python@py.cz >> >> > http://www.py.cz/mailman/listinfo/python >> >> > >> >> _______________________________________________ >> >> Python mailing list >> >> Python@py.cz >> >> http://www.py.cz/mailman/listinfo/python >> > >> >_______________________________________________ >> >Python mailing list >> >Python@py.cz >> >http://www.py.cz/mailman/listinfo/python >> _______________________________________________ >> Python mailing list >> Python@py.cz >> http://www.py.cz/mailman/listinfo/python > >_______________________________________________ >Python mailing list >Python@py.cz >http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python