[python] nevznik objektu

azurIt azurit na pobox.sk
Čtvrtek Březen 18 23:47:26 CET 2010


>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 <davro na 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 <davro na ics.muni.cz>
>> >> >
>> >> > _______________________________________________
>> >> > Python mailing list
>> >> > Python na py.cz
>> >> > http://www.py.cz/mailman/listinfo/python
>> >> >
>> >> _______________________________________________
>> >> Python mailing list
>> >> Python na py.cz
>> >> http://www.py.cz/mailman/listinfo/python
>> >
>> >_______________________________________________
>> >Python mailing list
>> >Python na py.cz
>> >http://www.py.cz/mailman/listinfo/python
>> _______________________________________________
>> Python mailing list
>> Python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>
>_______________________________________________
>Python mailing list
>Python na py.cz
>http://www.py.cz/mailman/listinfo/python


Další informace o konferenci Python