Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
de asemenea afişat în corpul mesajului de eroare. În exemplul anterior: ZeroDivisionError, NameError şi<br />
TypeError, desemnează tipul excepţiei. Şirul afişat este un nume predefinit pentru respectivul tip de excepţie.<br />
Acest lucru este valabil pentru toate excepţiile predefinite, dar se pot defini şi alte tipuri de excepţii.Numele<br />
excepţiilor standard sunt identificatori predefiniţi, nu cuvinte rezervate.<br />
A doua parte a liniei reprezintă detaliile excepţiei, descriind mai bine ce s-a întâmplat.<br />
În <strong>Python</strong> Library Reference sunt listate excepţiile implicite şi semnificaţiile lor.<br />
8.3 Tratarea excepţiilor<br />
Este posibil să scrieţi programe care tratează anumite tipuri de excepţii . În următorul exemplu este implementată<br />
o buclă care cere utilizatorului introducerea unui număr. Bucla este întreruptă în momentul în care utilizatorul<br />
introduce un număr corect, altfel procesul de introducere continuă. Procesul poate fi întrerupt folosind combinaţia<br />
de taste ’CTRL-C’. Dacă utilizatorul foloseşte această combinaţie de taste, programul este întrerupt, dar înainte<br />
este generată excepţia: KeyboardInterrupt:<br />
>>> while 1:<br />
... try:<br />
... x = int(raw_input("Please enter a number: "))<br />
... break<br />
... except ValueError:<br />
... print "Oops! That was no valid number. Try again..."<br />
...<br />
Instrucţiunea try funcţionează în felul următor:<br />
• Întâi sunt executate instrucţiunile din blocul try (blocul de instrucţiuni dintre instrucţiunile try şi except).<br />
• Dacă nu este generată nici o excepţie, instrucţiunile din blocul except nu sunt executate şi programul continuă.<br />
• Dacă apare o excepţie în timpul execuţiei instrucţiunilor din blocul try rstul instrucţiunilor din acest bloc<br />
sunt sărite. Dacă tipul excepţiei este acela pe care îl tratează şi blocul except, atunci sunt executate instruţiunile<br />
din acest bloc. După ce excepţia este tratată, execuţia programului continuă cu instrucţiunile ce<br />
urmează instrucţiunii try.<br />
• Dacă excepţia generată nu este prevăzută între excepţiile tratate în blocul except, ea este transmisă în<br />
afara blocului try.Dacă nu este găsit un bloc except care să trateze excepţia, aceasta va fi o excepţie<br />
netratată. Programul este întrerupt, afişând mesajul : unhandled exception.<br />
O instrucţiune try poate avea mai multe clauze except, implementând astfel mai multe tipuri de ’tratament’<br />
pentru mai multe tipuri de excepţii. Dintre toate clauzele except va fi executată cel mult una. Instrucţiunile unei<br />
clauze except, tratează numai excepţiile generate în blocul try căruia clauza îi este asociată, nu şi excepţiile ce<br />
pot apare în alte clauze except. Clauza din exemplul următor poate trata mai multe tipuri de excepţii desemnate<br />
printr-o lista inchisă între paranteze :<br />
... except (RuntimeError, TypeError, NameError):<br />
... pass<br />
Ultima clauză except poate fi folosită fără a se specifica ce anume excepţie tratează, în acest caz această clauză<br />
tratează toate excepţiile netratate de celelalte clauze. Puteţi folosi această ultimă precauţie, şi este indicat să o<br />
faceţi, pentru a ascunde toate erorile ce pot apărea şi pe care nu le-aţi anticipat. O puteţi de asemenea folosi pentru<br />
a afişa un mesaj de eroare şi apoi a regenera excepţia, care va fi transmisă mai departe, urmând să fie eventual<br />
tratată de un alt bloc try:<br />
52 Capitolul 8. Erori şi excepţii