I encountered a tricky situation with nested try-catch. Here is the sample code:
def f(): raise Exception("f") def g(): raise Exception("g") try: f() except: # do cleanup try: g() except: pass # ignore raise This code raises Exception("g") instead of Exception("f") as intended. The first exception is lost when the second one is generated. However, this issue has been resolved in Python 3.0. $ python2.5 a.py Traceback (most recent call last): File "a.py", line 13, in <module> g() File "a.py", line 6, in g raise Exception("g") Exception: g $ python3.0 a.py Traceback (most recent call last): File "a.py", line 9, in <module> f() File "a.py", line 3, in f raise Exception("f") Exception: f I managed to work-around that problem like this: try: f() except: x = sys.exc_info() # do cleanup try: g() except: pass # ignore raise x[0], x[1], x[2] It provides exception class, object and traceback to raise instead of letting raise take the last exception/traceback. Has anybody else faced similar situation? Any better solutions? Anand _______________________________________________ BangPypers mailing list BangPypers@python.org http://mail.python.org/mailman/listinfo/bangpypers