Bonjour à tous.
Je débute en python, je m'intéresse en ce moment aux user-defined exceptions.
J'ai réussi à créer une classe d'exception simple, à la lever et à la traiter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class MyError(Exception):
def __init__(self, a):
self.a = a
def func():
print "entering func"
raise MyError(42)
print "leaving func"
def main():
print "entering main"
try:
func()
except MyError, e:
print "alert", e.a
print "leaving main" |
entering main
entering func
alert: 42
leaving main
J'aimerai maintenant avoir 2 arguments à mon exception. J'ai réussi à faire ceci :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class MyError(Exception):
def __init__(self, a, b):
self.a = a
self.b = b
def func():
print "entering func"
raise MyError(42, 'blablabla')
print "leaving func"
def main():
print "entering main"
try:
func()
except MyError, e:
print "alert", e.a, e.b
print "leaving main" |
entering main
entering func
alert: 42 blablabla
leaving main
Seulement, je voudrais utiliser une syntaxe de cette forme, bien plus élégante:
except IOError, (errno, strerror):
C'est possible en levant directement une exception de la classe de base Exception:
1 2 3 4 5 6 7 8 9 10 11 12
| def func():
print "entering func"
raise Exception(42, "blablabla")
print "leaving func"
def main():
print "entering main"
try:
func()
except Exception, (a, b):
print "alert", a, b
print "leaving main" |
entering main
entering func
alert: 42 blablabla
leaving main
Mais si j'essaye de faire ça avec ma propre classe d'exceptions, j'obtiens une erreur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class MyError(Exception):
def __init__(self, a, b):
self.a = a
self.b = b
def func():
print "entering func"
raise MyError(42, "blablabla")
print "leaving func"
def main():
print "entering main"
try:
func()
except MyError, (a, b):
print "ex", a, b
print "leaving main" |
entering main
entering func
Traceback (most recent call last):
File "./test.py", line 20, in main
except MyError as (a, b):
ValueError: need more than 0 values to unpack
Quelqu'un peut-il m'expliquer ce qui ne va pas ?
Merci
Julien
Partager