On Jan 14, 1:51 am, "Mark Tolonen" <[EMAIL PROTECTED]> wrote: > "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. >
Well, what you meant by offending code and what I meant by offending code is different, what I meant by offending code as the code that makes the exception _need_ to be called (i.e. the a=1/0) and in my view (in this case), anything inside the except clause is not a real code, as it doesn't do anything "useful" for the program. > 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 Thanks. -- http://mail.python.org/mailman/listinfo/python-list