report true line number?

This commit is contained in:
David Rose 2003-07-17 17:33:04 +00:00
parent aa40b011f8
commit 138af95d58

View File

@ -690,6 +690,22 @@ def findPythonModule(module):
def describeException(backTrace = 4):
# When called in an exception handler, returns a string describing
# the current exception.
def byteOffsetToLineno(code, byte):
# Returns the source line number corresponding to the given byte
# offset into the indicated Python code module.
import array
lnotab = array.array('B', code.co_lnotab)
line = code.co_firstlineno
for i in range(0, len(lnotab),2):
byte -= lnotab[i]
if byte <= 0:
return line
line += lnotab[i+1]
return line
infoArr = sys.exc_info()
exception = infoArr[0]
@ -699,14 +715,18 @@ def describeException(backTrace = 4):
stack = []
while trace.tb_next:
module = trace.tb_frame.f_globals.get('__name__', None)
lineno = trace.tb_frame.f_lineno
stack.append("%s:%s, " % (module, lineno))
frame = trace.tb_frame
module = frame.f_globals.get('__name__', None)
lineno = frame.f_lineno
truelineno = byteOffsetToLineno(frame.f_code, frame.f_lasti)
stack.append("%s:%s(%s), " % (module, lineno, truelineno))
trace = trace.tb_next
module = trace.tb_frame.f_globals.get('__name__', None)
lineno = trace.tb_frame.f_lineno
stack.append("%s:%s, " % (module, lineno))
frame = trace.tb_frame
module = frame.f_globals.get('__name__', None)
lineno = frame.f_lineno
truelineno = byteOffsetToLineno(frame.f_code, frame.f_lasti)
stack.append("%s:%s(%s), " % (module, lineno, truelineno))
description = ""
for i in range(len(stack) - 1, max(len(stack) - backTrace, 0) - 1, -1):