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.

import string, sys<br />

try:<br />

f = open(’myfile.txt’)<br />

s = f.readline()<br />

i = int(string.strip(s))<br />

except IOError, (errno, strerror):<br />

print "I/O error(%s): %s" % (errno, strerror)<br />

except ValueError:<br />

print "Nu poate fi convertit in integer"<br />

except:<br />

print "Eroare neasteptata:", sys.exc_info()[0]<br />

raise<br />

Instrucţiunile try dispun şi de o clauză opţională: else. Atunci când aceasta este folosită, ea trebuie să fie<br />

ultima dintre clauze. Instrucţiunile acestei clauze vor fi executate atunci când, blocul try nu generează nici o<br />

excepţie. Iată un exemplu:<br />

for arg in sys.argv[1:]:<br />

try:<br />

f = open(arg, ’r’)<br />

except IOError:<br />

print ’cannot open’, arg<br />

else:<br />

print arg, ’has’, len(f.readlines()), ’lines’<br />

f.close()<br />

Utilizarea clauzei else este de preferat adăugării unor linii suplimentare de cod la sfârşitul blocului try, pentru<br />

că în acest fel se evită detectarea unei excepţii care nu a fost generată de instrucţiunile blocului try.<br />

O excepţie poate avea asociată şi o valoare, un argument al excepţiei. Prezenţa argumentului şi tipul acestuia<br />

depinde de tipul excepţiei.<br />

Clauza except poate accepta o variabilă după numele excepţiei, sau o listă de nume de excepţii.Variabila este legata<br />

de instanţa excepţiei, cu argumentele salvate în instance.args. Prin convenţie instanţa excepţiei defineşte _-<br />

_getitem__ şi __str__ si argumentele pot fi accesate, sau listate, direct, făra a mai referi .args.<br />

>>> try:<br />

... raise Exception(’spam’, ’eggs’)<br />

... except Exception, inst:<br />

... print type(inst) # instanta exceptiei<br />

... print inst.args # argumentele stocate in .args<br />

... print inst # __str__ permite args sa fie listate direct<br />

... x, y = inst # __getitem__ permite args sa fie despachetate direct<br />

... print ’x =’, x<br />

... print ’y =’, y<br />

...<br />

<br />

(’spam’, ’eggs’)<br />

(’spam’, ’eggs’)<br />

x = spam<br />

y = eggs<br />

Dacă o excepţie are un argument, acesta va fi afişat în ultima parte ("detaliu") a mesajului de excepţie netratată.<br />

Într-un bloc try nu sunt tratate numai excepţiile generate imediat în cadrul blocului, ci şi dacă acestea apar în<br />

funcţiilor apelate (chiar şi indirect) in bloc. De exemplu:<br />

8.3. Tratarea excepţiilor 53

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

Saved successfully!

Ooh no, something went wrong!