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