Exception passing
Alex Martelli
aleax at mac.com
Fri Mar 23 10:38:47 EDT 2007
Thomas Dybdahl Ahle <lobais at gmail.com> wrote:
> Hi, I have a function, which looks like the following:
>
> connecting = False
> def func ():
> global connecting
> connecting = True
> try:
> # Do lot of network stuff
> except Exception, e:
> connecting = False
> raise e
>
> This works quite good, but it is a hell to debug. Instead of getting a
> log message to the line which originally raised the exception.
>
> Is there anyway to reraise an exception, but preserve the log?
Just use
raise
without any argument.
E.g.:
>>> def raiser():
... print 1/0
...
>>> def reraise1():
... print 'before'
... try: raiser()
... except Exception, e:
... print 'after'
... raise e
...
>>> def reraise2():
... print 'before'
... try: raiser()
... except Exception, e:
... print 'after'
... raise
...
>>> reraise1()
before
after
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 6, in reraise1
ZeroDivisionError: integer division or modulo by zero
>>> reraise2()
before
after
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in reraise2
File "<stdin>", line 2, in raiser
ZeroDivisionError: integer division or modulo by zero
>>>
As you see, the traceback is "maintained" when you just "raise", though
it's altered when you "raise e".
Alex
More information about the Python-list
mailing list