Ieșirea / terminarea scripturilor Python (exemple Simple)

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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *