Re: [python] py2exe
Problem jsem uspesne vyresil a binarku je spustitelna snad jiz nezavisle na nainstalovanem softwaru. Pro celistvost posilam reseni problemu: Jiz jsem nevedel jak dal a tak jsem nainstaloval Microsoft Visual Studio 2008 (VS) v plnotucne verzi jako 30 denni trial. Spustil svou pythoni binarku, ktera zacala fungovat. Bylo tedy jasne, ze chybely knihovny zavlecene prave VS, ktere Express verze (ta byla nainstalovana jiz drive) nezavlekla. Od toho jsem se odpichl, zkopiroval slozku s VS a posleze odinstaloval. Ujistil jsem se, ze binarka opet nefunguje a zacal zkouset pridavat knihovny ze zkopirovane slozky VS. Resenim bylo do dir s binarkou nakopirovat 4 soubory ze slozky: Microsoft Visual Studio 9/VC/redist/Debug_NonRedist/amd64/Microsoft.VC90.DebugCRT/ manifest msvcm90d.dll msvcp90d.dll msvcr90d.dll Po tomto zasahu se binarka jiz spustila korektne. Mam vsak takove tuseni, ze jiz drive jsem tyto knihovny zkousel dohravat (avsak nebyly zkopirovane z VS ale nekde ze systemu ci z netu) a bezuspechu. Snad to v budoucnu nekomu pomuze. Vepro Jop, myslel, chybicka se vloudila pri kopirovani z terminalu :) Hmm, zacinaji mi dochazet napady :-/ jeste mozna - py2exe vypisuje na konci seznam DLL knihoven, ktery by ta binarka mela potrebovat, jeste zkus kouknout, jestli mas vsecky... Ale popravde moc sanci tomu nedavam. -j- 2010/3/17 veprop.zla...@gmail.com: Nemyslel jsi misto svcr90.dl msvcr90.dll?? Jelikoz svcr90 neni ani na kompilacnim stroji. Pokud ano tak vsechny tyto knihovny jsou v adresari dist (adr s binarkou) jiz od prapocatku, takze rada nepomohla:( Vepro On 03/17/2010 12:38 PM, rajcze wrote: Kdyztak jen zkontroluj, ze na te cilove masine urcite mas svcr90.dl, msvcp90.dll a msvcm90.dll pripadne je zkopiruj k tomu vybuildenymu exe souboru ze sveho vyvojoveho stroje, mohlo by to pomoct. Joza ___ 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] nevznik objektu
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
Re: [python] nevznik objektu
Skor by som to urobil cez vynimku - konstruktor v pripade zlej IPcky vyvola nejaku vynimku a objekt vytvoris takto: try: ipaddr = IP(192.1023.neco.1) except tvoja_vynimka: print zadavas blby vstup Ak 'ipaddr' potrebujes mat na None aj dalej v kode, tak este do except prihod: ipaddr = None -Pôvodná správa- Od: David Rohleder [mailto:da...@ics.muni.cz] Komu: python@py.cz Predmet: [python] nevznik objektu 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
Re: [python] nevznik objektu
Ahoj Že by konstruktor udělal něco tak, aby žádný objekt nevznikl, nejde (to není bug). Možností je několik: - vyhazovat výjimku (jak již bylo zmíněno) - nevolat konstruktor (tedy nevytvářet objekt), ale volat funkci, která sama vytvoří objekt, nebo vrátí None - podle mě nejlepší řešení - vytvořit objekt, který při porovnání s False vrátí True (lze implementovat přetížením/vytvořením metody __nonzero__) BTW. počítáš i s IPv6, že jo? :) 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
Re: [python] nevznik objektu
Ahoj, velmi standardni reseni je vyjimka, typicky ValueError (v tomto pripade). Vracet None v pripade spatnych vstupnich dat neni uplne nejlepsi napad, pokud to ma byt univerzalne pouzitelny kod (pokud jde o tvou vlastni funkci pro interni pouziti, tak si tam samozrejme naprogramuj, co ti zrovna vyhovuje). Jinak na IP adresy existuji velmi dobre napsane moduly, ale to predpokladam vis :) jirka P.S. Ciste technicky vzato, asi by se dalo zajistit aby ten objekt nevzniknul, pomoci metaclass. Ale bez znalosti kontextu se mi to zda zbytecne slozite. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] nevznik objektu
Petr Messner píše v Čt 18. 03. 2010 v 17:48 +0100: Ahoj Že by konstruktor udělal něco tak, aby žádný objekt nevznikl, nejde (to není bug). Možností je několik: - vyhazovat výjimku (jak již bylo zmíněno) 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. 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
Re: [python] nevznik objektu
Jirka Vejrazka píše v Čt 18. 03. 2010 v 18:09 +0100: Ahoj, velmi standardni reseni je vyjimka, typicky ValueError (v tomto pripade). Vracet None v pripade spatnych vstupnich dat neni uplne nejlepsi napad, pokud to ma byt univerzalne pouzitelny kod (pokud jde o tvou vlastni funkci pro interni pouziti, tak si tam samozrejme naprogramuj, co ti zrovna vyhovuje). proč ti přijde vracet None jako špatný nápad? Mně to naopak přijde jako dobrý nápad. můžu psát takové to if objekt: něco Jinak na IP adresy existuji velmi dobre napsane moduly, ale to predpokladam vis :) Narazil jsem jenom na netaddr a ipy, ale netaddr je příliš velký balík na to, co potřebuju a ipy zase nedělá to co chci. Nejsem příznivcem používání příliš velkých knihoven, zvlášť když je dobře neznám. Těch pár funkcí naprogramuju rychleji než bych nastudoval použití tech knihoven. A navíc, beru to trochu jako cestu jak se python trochu naučit, pořád narážím na samé zajímavosti. Třeba mne teď dostal rozdíl mezi for i in f.readline(): a for i in f.readlines(): pořád jsem si říkal, co to dělá za blbosti a pak jsem se musel bít do hlavy, co jsem za pako :-) D. jirka P.S. Ciste technicky vzato, asi by se dalo zajistit aby ten objekt nevzniknul, pomoci metaclass. Ale bez znalosti kontextu se mi to zda zbytecne slozite. ___ 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
Re: [python] nevznik objektu
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. 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
Re: [python] nevznik objektu
To zalezi na pouziti a kontextu, nebudu ti cpat neco co je pro tve pouziti zbytecne. Ale v Pythonu se obvykle povazuje za normalni, ze pokud nejaka funkce dostane chybna vstupni data, tak hodi vyjimku, aby ten kdo ji volal ze udelal neco spatne. Pokud jsou chybna vstupni data ocekavana, tak je to zvlastni pripad. Ale podle toho co popisujes, by se mi tam pocitove rozhodne hodila vyjimka. S tymto taktiez nesuhlasim :) Pri normalnom a korektnom behu aplikacie by vynimky takmer vobec nemali nastavat. Mam skor pocit, ze celu problematiku vynimiek chapes trochu nespravne. Priklad s tym tvojim objektom a kontrolou IP: Ty ako programator by si mal zabezpecit, aby do objektu vosla spravna IP adresa. Objekt bude pouzivat pravdepodobne nejaka aplikacia nad nim, napriklad nejake GUI. Kontrolu vstupnych udajov a chybove spravy pre pouzivatelov by si mal umiestnit prave tam a do objektu zaslat uz korektne data. Vynimky su urcene pre programatorov aby vedeli, kde nastal problem a co treba osetrit/opravit. Nevravim, ze vyvolavanie vynimiek je zle, niekedy je velmi pohodlne a spravne ich pouzit napriklad pri kontrole vstupu - v tvojom pripade nemusis pridavat kontrolu IPcky do GUI (tzn. nemusis kod zdvojovat), staci pridat kontrolu, ktora odchyti vynimku objektu. Vynimky nie su ziadne 'goto', je to skor taka komunikacia medzi roznymi vrstvami kodu. Já mám ovšem z toho používání výjimek někdy pocit, že nahradilo neexistující goto. Prostě chci být najednou někde jinde, tak si vyvolám výjimku a na nějakém správném místě si ji zpracuji. Ale to je věc názoru a čistoty návrhu, kde se to hodí a kde ne. 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
Re: [python] nevznik objektu
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 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
Re: [python] nevznik objektu
On 18.3.2010, at 23:11, David Rohleder wrote: 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? S výjimkami se musí počítat. U webových aplikací/služeb se typicky odchytávají na úrovni nějakého volání handleru HTTP odpovědi a když je výjimka zachycena, vrátí se HTTP status 500 Server Error, zrollbackují se transakce v databázi atd. a jede se dál. A i kdyby webová aplikace spadla (třeba na SIGSEGV) - v ideálním případě (a většina konfigurací takto funguje) se spustí znovu. Petr Messner ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python