astăzi, vom fi scufundați în subiectul ieșirii/încetării scripturilor Python! Înainte de a începe, ar trebui să aveți o înțelegere de bază a ceea ce este Python și câteva cunoștințe de bază despre utilizarea sa.
puteți utiliza IDE la alegere, dar voi folosi subsistemul Linux Microsoft Pentru Windows (WSL) pachet de data aceasta. Pentru mai multe informații despre acest lucru și despre modul în care îl activați pe Windows 10, accesați aici.
cuprins
De ce Python iese automat dintr-un script când este terminat?,
mod de Python executa un bloc de cod face o execute de fiecare linie în ordine, verificarea dependențelor de a importa, citind definițiile și clase pentru a stoca în memorie și de executare bucăți de cod, în scopul de a permite bucle și cheamă înapoi la definiții și clase.
când interpretorul Python ajunge la sfârșitul fișierului( EOF), observă că nu mai poate citi alte date de la sursă, fie că este vorba de intrarea utilizatorului printr-un IDE sau de citirea dintr-un fișier. Pentru a demonstra, să încercăm să obținem intrarea utilizatorului și să întrerupem interpretul în mijlocul execuției!,
În primul rând, de la terminalul bash din PowerShell, deschideți un nou fișier numit ” input.,n lipiți următorul text în shell prin click-dreapta pe fereastra PowerShell
name=input("Don"t type anything!\n")print("Hi,",name,"!")
Acum, apăsați CTRL+X
pentru a salva și a ieși din nano fereastră și în coajă de tip:
$ python3 input.pyDon"t type anything!
Și apăsați pe CTRL+D
pentru a anula programul în timp ce este în așteptare pentru intrare de utilizator
Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError
EOFError
excepție ne spune că interpretorul Python lovit de sfârșit de fișier (EOF) condiție înainte de a termina de executat codul, ca utilizatorul a intrat nici o intrare de date.,
când Python atinge condiția EOF în același timp în care a executat tot codul fără a arunca nicio excepție, ceea ce este un mod în care Python poate ieși „grațios.”
Detect script exit
dacă vrem să spunem când un program Python iese fără a arunca o excepție, putem folosi modulul Python încorporat atexit
.
atexit
mânere orice ne dorim ca programul să faci când iese și este de obicei folosit pentru a face program pentru a curăța înainte de program procesul se termină
Pentru a experimenta cu atexit, să modificăm intrare.,exemplu py pentru a imprima un mesaj la ieșirea din program. Deschide input.py fișier nou și înlocuiți textul cu asta
import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")
Tastați numele dvs., și atunci când te-a lovit enter, ar trebui să obțineți:
What"s your name?ExampleHi, Example !Program exited successfully!
Observați cum ieșire text apare la sfârșitul de ieșire, indiferent unde am loc atexit
apel, și cum dacă am înlocui atexit
apel cu un simplu print()
, vom ajunge la ieșire de text unde print()
toate au fost făcute, mai degrabă decât în cazul în care codul ieșirile.,
Program exited successfully!What"s your name?ExampleHi, Example !
ieșire Grațioasă
Există mai multe modalități de a ieși dintr-un Program in Python care nu implică arunca o excepție; primul a fost de gând să încercați este quit()
puteți folosi bash comanda echo $?
pentru a obține la ieșire codul de interpretorul Python.,
de asemenea, putem defini tipul de cod interpretul ar trebui să ieși cu dându quit()
un întreg argument mai puțin de 256
exit()
are aceeași funcționalitate ca este un alias pentru quit()
Nici quit()
sau exit()
sunt considerate o practică bună, deoarece ambele au nevoie de site
module, care este menit să fie folosit pentru interactive interpreți și nu în programe., Pentru programele noastre, ar trebui să utilizați ceva de genul sys.exit
Observați că avem nevoie pentru a în mod explicit importați un modul pentru a apela exit()
, acest lucru ar putea părea ca sa nu o îmbunătățire, dar nu garantează că este necesar modulul este încărcat pentru că nu e o presupunere bună site
va fi încărcat la runtime., Dacă nu doriți să importați module suplimentare, putem face ceea ce exit()
, quit()
și sys.exit()
fac în spatele scenei și raise SystemExit
Ieșire cu mesaje de eroare
dacă avem rău de intrare de la utilizator?, Hai să privim înapoi la noastre input.py
script-ul, și adaugă capacitatea de a gestiona rău de intrare de la utilizator (CTRL+D
să treacă un caracter EOF)
try
declarație spune Python pentru a încerca codul în declarație și pentru a trece orice excepție de la except
declarație înainte de a ieși.ce se întâmplă dacă utilizatorul predă programul dvs. o eroare, dar nu doriți ca codul dvs. să imprime o eroare sau să facă un fel de manipulare a erorilor pentru a minimiza impactul utilizatorului?,
putem adăuga un finally
declarație care ne permite să execute cod dupa eroare de manipulare în catch
Notificare utilizatorul nu va ști niciodată un EOFError
s-a întâmplat, acest lucru poate fi folosit pentru a transmite valorile implicite în caz de săraci de intrare sau de argumente.,
Ieșire și eliberați resursele
în General, Python eliberează toate resursele pe care le-am numit în program în mod automat atunci când iese, dar pentru anumite procese, este o bună practică să incadrati unele resurse limitate într-un with
bloc.
de multe ori veți vedea acest lucru în apelurileopen()
, unde eșecul de a elibera corect fișierul ar putea cauza probleme cu citirea sau scrierea fișierului ulterior.
with
bloc eliberează automat toate resursele rechiziționate în ea., Dacă am vrut să mai explicit asigura dosar a fost închis, am putea folosi atexit.register()
comandă pentru a numi close()
$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)
Dacă resursele sunt numite, fără a utiliza un with
bloc, asigurați-vă că pentru a în mod explicit eliberați-le într-un atexit
comandă.dacă suntem îngrijorați că programul nostru nu s-ar putea termina în mod normal, atunci putem folosi modulul Python multiprocessing
pentru a ne asigura că programul nostru se va termina.,
observați cum procesul nu a reușit să se finalizeze atunci când funcția i s-a spus să aștepte 7 secunde, dar a completat și a imprimat ceea ce trebuia când i s-a spus să aștepte 0 secunde!dacă avem o secțiune de cod pe care dorim să o folosim pentru a termina întregul program, în loc să lăsăm break
declarația continuă cod în afara buclei, putem folosi return sys.exit()
pentru a ieși complet din cod.,
Ieșire în mijlocul de o funcție
Dacă nu doriți să utilizați o declarație de întoarcere, încă mai putem chema sys.exit()
pentru a închide programul nostru și de a oferi un return
într-o altă ramură. Să folosim codul nostru de la break.py din nou.
ieșire când sunt îndeplinite condițiile
dacă avem o buclă în codul nostru Python și vrem să ne asigurăm că codul poate ieși dacă întâmpină o problemă, putem folosi un steag pe care îl poate verifica pentru a termina programul.,
Ieșire la apăsarea tastei
Dacă vrem să ne menținem programul nostru deschis în consolă până când am apăsați o tastă, putem folosi un nelegat input()
să-l închidă.
$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$
putem trece, de asemenea, CTRL+C
la consola pentru a da Python-un KeyboardInterrupt
caracter. Putem chiar să ne ocupăm de excepția KeyboardInterrupt
, așa cum am tratat excepțiile înainte.,
Ieșire un program multithreaded
Ieșirea dintr-un program multithreaded este mai puțin implicat, ca un simplu sys.exit()
este chemat de la firul care va ieși din fir de curent., „Murdar” mod de a face asta este de a utiliza os._exit()
după Cum puteți vedea, programul nu imprima restul de program înainte de ea a ieșit, asta e ce os._exit()
este de obicei rezervat pentru o ultimă instanță, și apelarea fie Thread.join()
de la firul principal este metoda preferată pentru care se încheie un program multithreaded.,
End fără sys de ieșire
Sys.exit()
este doar unul dintre mai multe moduri prin care putem ieși noastre programe în Python, ce sys.exit()
nu este raise SystemExit
, astfel încât să putem folosi la fel de ușor orice built-in Python excepție sau de a crea unul de-al nostru!
de asemenea, putem folosi os._exit()
pentru a spune sistemul gazdă pentru a ucide proces python, deși acest lucru nu face atexit
curatare.,
Ieșire la excepția
Dacă vrem să ieși pe nici o excepție, fără nici o manipulare, putem folosi try-except
bloc pentru a executa os._exit()
.
ieșiți și reporniți
În cele din urmă, vom explora ce facem pentru a ieși din Python și a reporni programul, ceea ce este util în multe cazuri.
sper că veți găsi tutorial util. Continuă să te întorci.
Vă mulțumim.,
Fondator al LikeGeeks. Lucrez ca administrator de sistem Linux din 2010. Sunt responsabil pentru întreținerea, securizarea și depanarea serverelor Linux pentru mai mulți clienți din întreaga lume. Îmi place să scriu scripturi shell și Python pentru a-mi automatiza munca.