Dnes, budeme potápění do tématu opuštění/ukončení Python skripty! Než začneme, měli byste mít základní znalosti o tom, co je Python, a některé základní znalosti o jeho použití.
můžete použít IDE dle vašeho výběru, ale tentokrát použiji balíček Microsoft Linux Subsystem pro Windows (WSL). Další informace o tom a o tom, jak jej povolíte v systému Windows 10, naleznete zde.
obsah
proč Python automaticky ukončí skript, když je hotovo?,
způsob, jak Python provede blok kódu umožňuje provést každý řádek v pořadí, kontrola závislostí na dovozu, čtení, definice a třídy pro ukládání do paměti a provádění kusy kódu v pořadí, což pro smyčky a volání zpět do vymezené definice a třídy.
Když Python interpret dosáhne konce souboru (EOF), zjistí, že nemůže číst data ze zdroje, ať už je to vstup uživatele prostřednictvím IDE nebo čtení ze souboru. Chcete-li demonstrovat, zkusme získat vstup uživatele a přerušit tlumočníka uprostřed provádění!,
nejprve z terminálu bash v PowerShellu otevřete nový soubor s názvem “ vstup.,n vložte následující do pláště kliknutím pravým tlačítkem na okno prostředí PowerShell
name=input("Don"t type anything!\n")print("Hi,",name,"!")
Nyní stiskněte CTRL+X
uložte a ukončete nano okno a v shellu typ:
$ python3 input.pyDon"t type anything!
A stiskněte tlačítko CTRL+D
ukončit program, když čeká na vstup od uživatele
Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError
EOFError
výjimka nám říká, že Python interpret narazí na konec souboru (EOF) stav před tím, než skončil provádění kódu, jako uživatel zadán žádný vstupní data.,
Když Python dosáhne stavu EOF současně s tím, že provedl veškerý kód bez házení výjimek,což je jeden způsob, jak Python může „elegantně ukončit“.“
Detect script exit
Pokud chceme zjistit, kdy Python program ukončí bez vyhazování výjimky, můžeme použít vestavěný Python atexit
modul.
atexit
úchyty cokoliv chceme, aby program dělat, když se to ukončí a je obvykle používán dělat program vyčistit dříve, než program, proces se ukončí.
experimentovat s atexit, pojďme změnit náš vstup.,py příklad pro tisk zprávy na ukončení programu. Otevřete input.py soubor znovu a nahradit text s tímto
import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")
Zadejte své jméno, a když stisknete enter, měli byste si:
What"s your name?ExampleHi, Example !Program exited successfully!
Všimněte si, jak výstupní text se zobrazí na konci výstupu bez ohledu na to, kde jsme místo atexit
zavolejte, a jak, pokud bychom nahradit atexit
volat s jednoduchým print()
, dostaneme na výstupu text, kde print()
bylo vše stvořeno, spíše než tam, kde kód východy.,
Program exited successfully!What"s your name?ExampleHi, Example !
Elegantní exit
Existuje několik způsobů, jak ukončit Program v Pythonu, který nezahrnuje házení výjimku; první se bude snažit je quit()
můžete použít bash příkaz echo $?
chcete-li získat ukončovací kód Pythonu.,
můžeme také definovat typ kód tlumočník by měl opustit s tím, že podal quit()
integer argument méně než 256
exit()
má stejnou funkci jako je alias pro quit()
Ani quit()
ani exit()
jsou považovány za dobrou praxi, protože oba vyžadují site
modul, který je určen k použití na interaktivní tlumočníků a ne v programech., Pro naše programy, bychom měli použít něco jako sys.exit
Všimněte si, že musíme explicitně importovat modul pro volání exit()
, to se může zdát jako zlepšení, ale to zaručuje, že potřebné modul je načten, protože to není dobrý předpoklad site
budou načteny za běhu., Pokud nechceme importovat další moduly, můžeme dělat, co exit()
, quit()
sys.exit()
dělají v zákulisí a raise SystemExit
Konec s chybové zprávy
Co když budeme mít špatný vstup od uživatele?, Pojďme se podívat na naši input.py
scénář, a přidat schopnost zvládnout špatný vstup od uživatele (CTRL+D
předat EOF znak)
try
prohlášení říká, Python vyzkoušet kódu uvnitř prohlášení a předat žádnou výjimku except
prohlášení před ukončením.
Ukončení bez chyby
Co když uživatel ruce vašem programu chybu, ale nechcete, aby váš kód k tiskové chybě, nebo dělat nějaký druh zpracování chyb, aby se minimalizovalo uživatele dopad?,
můžeme přidat finally
prohlášení, že nám umožňuje spustit kód poté, co jsme dělat naše zpracování chyb v catch
Všimněte si, že uživatel by nikdy vědět, EOFError
došlo, to může být použit předat výchozí hodnoty v případě špatného zadání či argumenty.,
Opustit a uvolnit své zdroje
Obecně platí, že Python uvolní všechny zdroje, které jsem volal v programu automaticky, když se ukončí, ale pro určité procesy, je vhodné obalit některé omezené zdroje v with
blok.
Často uvidíte to v open()
hovory, kde neplní řádně vydání souboru může způsobit problémy při čtení nebo zápisu do souboru později.
with
blokovat automaticky uvolní všechny zdroje, zažádal v rámci to., Pokud bychom chtěli více explicitně ujistěte se, že soubor byl uzavřen, mohli bychom použít atexit.register()
příkaz call close()
$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)
Pokud zdroje jsou povoláni bez použití with
blok, ujistěte se, že explicitně uvolnění je v atexit
příkaz.
Exit po čase
Pokud se obáváme, že náš program nemusí nikdy normálně skončit, můžeme použít modul Python multiprocessing
, abychom zajistili ukončení našeho programu.,
Všimněte si, jak proces nepodařilo dokončit, když se funkce bylo mi řečeno, čekat za 7 sekund, ale vyplněný a vytištěný, co to mělo, když to bylo řečeno, čekat 0 sekund!
Ukončení pomocí return
Pokud máme část kódu chceme využívat ukončit celý program, místo toho, aby break
prohlášení i nadále kód mimo smyčky, můžeme použít return sys.exit()
exit kód úplně.,
Exit uprostřed funkce
Pokud nechceme použít return prohlášení, můžeme stále říkat, sys.exit()
zavřít program a poskytnout return
v jiném oboru. Použijeme náš kód z break.py znovu.
Výstupu, pokud jsou splněny podmínky
máme-Li smyčku v naší Python kód a my chceme, aby se ujistěte se, že kód může ukončit, pokud narazí na problém, můžeme použít příznak, který může kontrolu ukončit program.,
Exit o stisknutím tlačítka
Pokud se chceme držet našeho programu otevřete v konzole, dokud jsme stiskněte klávesu, můžeme použít v nevázaný input()
zavřít.
$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$
můžeme také předat CTRL+C
do konzole dát Python KeyboardInterrupt
charakter. Můžeme dokonce zvládnout výjimku KeyboardInterrupt
, jako jsme dříve řešili výjimky.,
Exit multithreaded programu
Ukončení vícevláknový program je o něco více zapojit, jako jednoduchý sys.exit()
je volána z vlákna, které bude jen opustit aktuální vlákno., „Špinavé“ způsob, jak to udělat, je použít os._exit()
Jak můžete vidět, program neotiskli zbytek programu před tím, než vyšla, a to je důvod, proč os._exit()
je obvykle vyhrazena pro poslední možnost, a volat buď Thread.join()
z hlavní vlákno je preferovanou metodou pro ukončení vícevláknových programu.,
Konce, aniž sys exit
Sys.exit()
je pouze jedním z několika způsobů, jak můžeme opustit náš Python programy, co sys.exit()
raise SystemExit
, takže můžeme stejně snadno použít jakýkoliv vestavěný Python výjimkou, nebo si vytvořte vlastní!
můžeme také použít os._exit()
říct hostitelského systému zabít python proces, ačkoli to není atexit
vyčištění.,
Exit na výjimky
chceme-Li výstup na výjimky bez nějaké manipulace, můžeme použít naše try-except
blok execute os._exit()
.
ukončete a restartujte
nakonec prozkoumáme, co děláme pro ukončení Pythonu a restartování programu, což je v mnoha případech užitečné.
doufám, že vám tutoriál bude užitečný. Vrať se.
Děkuji.,
Zakladatel LikeGeeks. Od roku 2010 pracuji jako správce systému Linux. Jsem zodpovědný za údržbu, zabezpečení a odstraňování problémů s linuxovými servery pro více klientů po celém světě. Miluji psaní skriptů shell a Python pro automatizaci mé práce.