"Lie" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] >A built-in exceptions, when raised, would print traceback that points > out the offending code, like this: > > Traceback (most recent call last): > File "F:\dir\code.py", line 43, in <module> > a = 1/0 <<<--- > ZeroDivisionError: integer division or modulo by zero > > a user-made exception, when raised, would print traceback that points > out the code that raises the exception > > Traceback (most recent call last): > File "F:\dir\code.py", line 48, in <module> > raise SomeException('Some Exception Message') <<<--- > SomeException: Some Exception Message > > which is generally of little use (yeah, it's possible to trace the > code from the line number, but sometimes it might not be that easy, > cause the line number is (again) the line number for the raising code > instead of the offending code) > > The sample exception was generated from this code: > #### > class SomeException(Exception): > pass > > try: > a = 1/0 > except: > raise SomeException('Some Exception Message') > #### > > Is it possible to make the user-made exception points out the > offending code?
The raise statement *was* the offending (unhandled exception) code. The ZeroDivisionError was handled by your except clause. You can override the traceback your exception will use with the three-expression form of the raise statement (See Section 6.9 "The raise statement" in the Python Reference Manual) by passing the traceback of the original exception: ###### CODE ##### import sys class SomeException(Exception): pass try: a=1/0 except: org_type,org_value,org_traceback = sys.exc_info() raise SomeException,'had some problems with this code',org_traceback ###### OUTPUT ###### Traceback (most recent call last): File "exc.py", line 7, in <module> a=1/0 SomeException: had some problems with this code --Mark -- http://mail.python.org/mailman/listinfo/python-list