28.01.2015 Views

Tutorial Python - Starship

Tutorial Python - Starship

Tutorial Python - Starship

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!