Portál AbcLinuxu, 13. května 2025 02:56

Dotaz: Python, explicitni exit

17.8.2007 16:17 qwerty
Python, explicitni exit
Přečteno: 491×
Odpovědět | Admin
Ahoj,

nevite nekdo jak udelat v pythonu, aby pri importovani modulu explicitne skoncil jeho provadeni napr. pri splneni nejake podminky ? Neco ve smyslu:

if cond: break

Break, continue ani return nefunguje :) Diky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

17.8.2007 16:51 edois
Rozbalit Rozbalit vše Re: Python, explicitni exit
Odpovědět | | Sbalit | Link | Blokovat | Admin
pokud se ptate na to, na co myslim, ze se ptate, tak:
from sys import exit
exit(0)
nebo
import sys
sys.exit(0)
nebo
raise SystemExit(0)
17.8.2007 16:52 edois
Rozbalit Rozbalit vše Re: Python, explicitni exit
(samozrejme misto te nuly lze dat jiny navratovy kod)
17.8.2007 17:12 qwerty
Rozbalit Rozbalit vše Re: Python, explicitni exit
To neni ono, to ukonci cely program. To co potrebuji je aby to ukoncilo provadeni modulu. Semanticky by se to melo chovat tak jako by na danem miste bylo goto na konec zdrojoveho textu daneho importovaneho skriptu. Tzn. pak se provadeni vrati do mista odkud byl volan import toho modulu. Jednou moznosti by mohlo mozna byt dat import do try bloku a v pozadovanem miste ve zdrojovem textu modulu zavolat sys.exit() a venku tu vyjimku odchytit, protoze pokud se nemylim sys.exit() vyvola vyjimku. Spis by me zajimalo jestli neexistuje nejake prirozenejsi reseni, python moc neumim tak nevim :)
17.8.2007 17:17 edois
Rozbalit Rozbalit vše Re: Python, explicitni exit
import do try blocku vubec neni spatny napad, ale je potreba tam chytat jen tu jednu exception, tzn. SystemExit
17.8.2007 17:25 edois
Rozbalit Rozbalit vše Re: Python, explicitni exit
pripadne ten modul mit takhle:

while True:

    # tady nejaky kod

    if cond: break

    # tady dalsi kod

    if cond: break

    # tady posledni kus kodu

    break

#endwhile

17.8.2007 17:30 edois
Rozbalit Rozbalit vše Re: Python, explicitni exit
uplne nejlepsi je stejne
def init():
    # kod

    if cond: return

    # kod

    if cond: return

    # kod
#enddef

init()

17.8.2007 17:32 qwerty
Rozbalit Rozbalit vše Re: Python, explicitni exit
Ano tu moznost hodit cely obsah modulu do nejakych podminkovych bloku me samozrejme napadla ale nechtel jsem to delat :), je to pak zmatek kdyz k vuli jedne podmince uprostred kodu mam dat obrovsky blok do nejakeho ifu.

Co se tyce toho zpusobu s tou vyjimkou, pouzit ten sys.exit se mi taky moc nechce protoze on to vlastne "neni" SystemExit a jen bych zneuzil tuto vyjimku k jinemu ucelu.

Pokud tedy neexistuje zadne standartni reseni tohodle problemu tak me napada ze asi nejlepsi by bylo proste tam vyhodit mnou definovanou vlastni vyjimku a u importu ji chytit.
20.8.2007 09:19 Petr Mach | skóre: 9 | blog: Hláska
Rozbalit Rozbalit vše Re: Python, explicitni exit
Samozřejmě, udělej si vlastní výjimku ExceptionModuleAbort, to je čisté řešení.
17.8.2007 17:29 Radek Podgorny | skóre: 16
Rozbalit Rozbalit vše Re: Python, explicitni exit
Odpovědět | | Sbalit | Link | Blokovat | Admin
...a k cemu to?
http://podgorny.cz
17.8.2007 17:30 edois
Rozbalit Rozbalit vše Re: Python, explicitni exit
taky zajimava otazka ;)
19.8.2007 21:01 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše admin
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sorry, tento dotaz je v Poradně offtopic, a proto bude uzamčen a později vymazán. Díky za pochopení.
19.8.2007 23:17 Tomas
Rozbalit Rozbalit vše Re: Python, explicitni exit
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bud jak bylo receno to cele dat do funkce, nebo pouzit vyjimku:
class ExitModule(Exception):
  pass

try:

  ... nejaky kod ...

  # ukonceni modulu 
  raise ExitModule

  ... nejaky kod ...

except ExitModule:
  pass

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.