Este foarte frecvent întâlnirea erorilor în timpul executării unui program. Două tipuri comune de erori pe care ar putea să le rezolvați sunt erorile și excepțiile de sintaxă. Eroare de sintaxă apar atunci când introduceți incorect codul. În astfel de cazuri, linia eronată este repetată de parser cu o săgeată îndreptată spre cea mai veche locație unde a fost detectată eroarea.
Excepțiile sunt diferite de erorile de sintaxă. Ele apar în timpul executării unui program când se întâmplă ceva neașteptat. De exemplu, să presupunem că cereți utilizatorului să introducă un număr pentru a efectua o divizare. Acum, dacă utilizatorul introduce un șir în loc de un număr și încercați să împărțiți un număr prin intrarea dată, programul va afișa o Eroare de scris
.
Când nu gestionați în mod corespunzător excepțiile, programul se va opri brusc, deoarece nu va ști ce să facă în astfel de cazuri. Următorul cod este un astfel de exemplu:
Keep_asking = Adevărat în timp ce keep_asking: x = int (introduceți ("Introduceți un număr:")) print ("Împărțiți 50 de", x "
Atâta timp cât introduceți o valoare de intrare integrală, programul va funcționa corect. Cu toate acestea, de îndată ce introduceți un șir sau chiar un număr zecimal ca intrare, veți obține o ValueError
excepție.
În acest tutorial, veți învăța cum să gestionați corect și să ridicați excepții în Python.
Iată câteva excepții de bază pe care le-ați putea întâlni la scrierea programelor. Puteți citi despre multe excepții încorporate pe site-ul oficial.
Eroare de scris
excepție este mai adecvată.La fel ca și cele de mai sus, cele mai multe excepții au nume explicite.
Codul de la începutul articolului a cerut utilizatorilor să introducă un număr întreg ca intrare. Dacă utilizatorul nu a furnizat o intrare întreg, programul a oprit execuția și a ridicat o excepție de eroare de valoare. În această secțiune, vom scrie un cod pentru a spune utilizatorului că intrarea lor nu este o valoare integeră valabilă.
Primul pas al procesului este includerea codului pe care îl credeți că ar putea ridica o excepție în interiorul lui încerca
clauză. Următorul pas este să utilizați cu exceptia
cuvinte cheie pentru a face față excepției care a apărut în codul de mai sus. Codul modificat pentru intrarea utilizatorului va arăta astfel:
Keep_asking = Adevărat în timp ce keep_asking: try: x = int (introduceți ("Introduceți un număr:")) print (" Intrarea nu a fost un număr întreg. Încercați din nou ... ")
Ce se întâmplă aici este că programul încearcă să execute codul în interiorul lui încerca
clauză. Dacă nu a fost invocată nicio excepție, programul va ignora cu exceptia
clauza și restul codului se execută în mod normal. Dacă se generează o excepție, programul ignoră codul rămas din interiorul lui încerca
clauza și tipul excepției sunt însoțite de numele excepției după cu exceptia
cuvinte cheie. În cazul unui meci, codul din interiorul lui cu exceptia
clauza este executată mai întâi și apoi restul codului după încerca
clauza este executată în mod normal.
Când introduceți un număr întreg ca intrare, programul vă oferă rezultatul final al diviziunii. Când este furnizată o valoare non-integrală, programul imprimă un mesaj care vă cere să încercați să introduceți din nou un întreg. Rețineți că de această dată, programul nu se oprește brusc când furnizați o intrare nevalidă.
Puteți avea mai multe cu exceptia
clauze pentru a face față diferitelor excepții. Rețineți că acești agenți de manipulare se vor ocupa numai de excepțiile care au apărut în secțiunea corespunzătoare încerca
clauză. Ei nu vor face față niciunei excepții ridicate în cadrul altor proceduri de tratare a excepțiilor.
De asemenea, puteți gestiona mai multe excepții utilizând un singur cu exceptia
clauza prin trecerea acestor excepții la clauză ca a tuplu
.
cu excepția (ZeroDivisionError, ValueError, TypeError): print ("Ceva a mers prost ...") # code pentru a face față excepției
În cele din urmă, puteți renunța și la numele excepției după cu exceptia
cuvinte cheie. În general, acest lucru nu este recomandat, deoarece codul va capta acum toate excepțiile și le va manipula în același mod. Acest lucru nu este optim deoarece vă veți ocupa de a Eroare de scris
cu excepția aceluiași mod ca și cum ați fi tratat o ZeroDivisionError
excepție. Atunci când se lucrează cu excepții, este mai bine să fie cât mai concret posibil și să prindeți doar ceea ce puteți face.
O posibilă utilizare a capturilor tuturor excepțiilor este de a imprima în mod corespunzător eroarea de excepție pe ecran, cum ar fi următorul cod:
Importul de matematică sys try: result = math.factorial (2.4) cu excepția: print ("Ceva neașteptat sa întâmplat.", sys.exc_info () [0]) alt: print ("Factorul este"
Puteți utiliza, de asemenea, un altfel
clauza în a încercați ... cu excepția
afirmație. altfel
clauza este menită să conțină codul care trebuie executat dacă încerca
clauza nu a generat excepții. Acest lucru poate fi util pentru a vă asigura că nu adăugați niciun cod la încerca
bloc ale cărui excepții nu intenționați să le luați. Un lucru care merită menționat este că dacă decideți să utilizați un altfel
clauza, ar trebui să o includeți după toate cu exceptia
clauze, dar înainte de in cele din urma
bloc.
În cazul nostru, am putea muta linia care imprimă rezultatul diviziunii noastre în interiorul altfel
bloc.
Keep_asking = Adevărat în timp ce keep_asking: încercați: x = int (introduceți ("Introduceți un număr:")), cu excepția ValueError: print (Inputul nu a fost un număr întreg valid. prin ", x" vă va oferi: ", 50 / x)
Să presupunem că ați scris un cod înăuntru încerca
care ar trebui să îndeplinească o sarcină utilizând o cantitate mare de resurse. Este important să eliberați aceste resurse înapoi când ați terminat să le utilizați. Acest lucru poate fi ușor realizat prin utilizarea in cele din urma
clauză.
Codul din interiorul lui in cele din urma
clauza este executată întotdeauna indiferent dacă încerca
bloc a ridicat o excepție. Puteți verifica acest lucru executând următorul cod:
Keep_asking = Adevărat în timp ce keep_asking: încercați: x = int (introduceți ("Introduceți un număr:")), cu excepția ValueError: print (Inputul nu a fost un număr întreg valid. cu ", x," vă va da: ", 50 / x) în cele din urmă: tipăriți (" Ați făcut deja totul necesar ").
În cazul în care oricare dintre cu exceptia
clauzele pe care le-ați specificat nu fac față excepției ridicate, aceeași excepție este ridicată din nou după executarea codului în interiorul in cele din urma
bloc.
În această secțiune, vom scrie un program pentru a face față mai multor excepții. La fel ca exemplele anterioare, vom efectua unele operații matematice. Cu toate acestea, de data aceasta vom lua intrarea dintr-o listă.
Următorul cod verifică două excepții, Eroare de scris
și ValueError
. altfel
bloc este utilizat pentru a imprima factorial. Puteți vedea în ieșire că acest cod este executat numai atunci când nu se ridică nicio excepție.
import math number_list = [10, -5,1,2, apple] pentru numărul din numărul_list: try: number_factorial = math.factorial (număr) cu excepția TypeError: print (cu excepția ValueError : print ("Factorialul lui", numărul, "este", numărul_factorial) în cele din urmă: print ("Eliberați orice resurse in folosinta.")
Codul de mai sus produce următoarea ieșire:
Factorul de 10 este 3628800 Eliberarea oricăror resurse în uz. Factorial acceptă numai valori întregi pozitive. -5 nu este un număr întreg pozitiv. Eliberarea oricăror resurse în uz. Factorial acceptă numai valori întregi pozitive. 1.2 nu este un număr întreg pozitiv. Eliberarea oricăror resurse în uz. Factorial nu este acceptat pentru tipul de intrare dat. Eliberarea oricăror resurse în uz.
Un alt lucru care merită remarcat este că codul din interiorul lui in cele din urma
clauza este executată pentru fiecare element din listă.
Sper că acest tutorial v-a ajutat să înțelegeți tratarea excepțiilor în Python. În plus, nu ezitați să vedeți ce avem la dispoziție pentru vânzare și pentru a studia pe piață și nu ezitați să întrebați orice întrebări și să furnizați feedback-ul valoros utilizând feedul de mai jos.
Manipularea excepțiilor în mod corespunzător poate fi foarte utilă în situațiile în care ieșirea dintr-un program după ce primește o intrare neașteptată nu este viabilă. Dacă aveți întrebări legate de tratarea excepțiilor în Python, anunțați-ne în comentariile respective.
Aflați Python cu ghidul nostru complet de instrucțiuni Python, indiferent dacă sunteți doar începători sau sunteți un coder experimentat în căutarea unor noi abilități.