7
Výjimky
try:
<příkazy> except <jméno1>: <příkazy>
except <jménoN>, <prom>: <příkazy> else:
<příkazy> try:
<příkazy> finally:
<příkazy> raise <jméno> raise <jméno> <hodnota> % cat problem1.py
def volana(x, y): return x / y
def volajici(x): return volana(x, 0)
print volajici(1)
% python problem1.py
Traceback (most recent call last):
File "C:\Python22\problem1.py", line 3, in ?
print volajici(1)
File "C:\Python22\problem1.py", line 2, in volajici
def volajici(x): return volana(x, 0)
File "C:\Python22\problem1.py", line 1, in volana
def volana(x, y): return x / y
ZeroDivisionError: integer division or modulo by zero
def bouchneTo(seznam, n):
print seznam[n] try:
bouchneTo([0, 1, 2], 3)
except IndexError: print 'To je mi překvapení!'
print 'Papuče!'
MojeChyba = "Moje malá chybička."
def neco(soubor):
raise MojeChyba
soubor = open('data', 'r') try:
neco(soubor) finally: soubor.close() while 1:
try: radek = raw_input() except EOFError: break else: nějak zpracováváme radek
Nalezeno = "Položka nalezena"
def hledac(): vyhodí Nalezeno nebo prostě skončí
try: hledac()
except Found: Nalezena else: Nenalezena try:
Spustíme program
except: import sys
print 'Neošetřená výjimka', sys.exc_type, sys.exc_value
try:
neco()
except NameError:
...
except IndexError
...
except KeyError:
...
except (AttributeError, TypeError, SyntaxError):
...
else:
...
% cat vnortry.py
def fce2():
print 1 + [] def fce1():
try:
fce2()
except TypeError: print 'vnitřní' try:
fce1()
except TypeError: print 'vnější'
% python vnortry.py
vnitřní
% cat finally.py
def vydel(x, y):
return x / y def test(y):
try: print vydel(8, y)
finally: print 'na závěr ...'
print 'test(2):'; test(2)
print 'test(0):'; test(0) % python finally.py
test(2):
4
na závěr ...
test(0):
na závěr ...
Traceback (most recent call last):
File "C:\Python22\finally.py", line 9, in ?
print 'test(0):'; test(0) File "C:\Python22\finally.py", line 5, in test
try: print vydel(8, y)
File "C:\Python22\finally.py", line 2, in vydel
return x / y ZeroDivisionError: integer division or modulo by zero
% cat ahojvyj.py
mojeVyjimka = 'Chyba' def vyhazovac1():
raise mojeVyjimka, "ahojte" def vyhazovac2():
raise mojeVyjimka def zkousecka(fce):
try:
fce() except mojeVyjimka, navic: print 'dostali jsme:', navic
% python
>>> from ahojvyj import *
>>> zkousecka(vyhazovac1)
dostali jsme: ahojte
>>> zkousecka(vyhazovac2)
dostali jsme: None
assert <podmínka>, <hodnota> if __debug__:
if not <podmínka>:
raise AssertionError, <hodnota>
raise retezec, data raise retezec raise trida, instance raise instance raise raise trida raise trida, arg raise trida, (arg1, arg2, ...) % cat tridvyj.py
import sys
class Predek: pass
class Potomek(Predek): pass
def vyhazovac1():
X = Predek()
raise X
def vyhazovac2():
X = Potomek()
raise X
for fce in (vyhazovac1, vyhazovac2):
try: fce()
except Predek:
print 'Zachycena', sys.exc_type
% python tridvyj.py
Zachycena __main__.Predek
Zachycena __main__.Potomek
>>> vyj1 = "něco"
>>> vyj2 = "něco"
>>> vyj1 == vyj2, vyj1 is vyj2
(1, 0)
>>> try:
... raise vyj1
... except vyj1:
... print 'zachyceno'
...
zachyceno
>>> try:
... raise vyj1
... except vyj2:
... print 'zachyceno'
...
Traceback (most recent call last):
File "<stdin>", line 2, in ?
něco
try: ...
except: ...
try: x = mujSlonvik[neco] except: x = None
try: ... except (mojevyj1, mojevyj2): ...