]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
New module, formats traceback just like the C code does
authorGuido van Rossum <guido@python.org>
Fri, 1 Jul 1994 15:36:46 +0000 (15:36 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 1 Jul 1994 15:36:46 +0000 (15:36 +0000)
Lib/traceback.py [new file with mode: 0644]

diff --git a/Lib/traceback.py b/Lib/traceback.py
new file mode 100644 (file)
index 0000000..c78d9ad
--- /dev/null
@@ -0,0 +1,57 @@
+# Format and print Python stack traces
+
+import linecache
+import string
+import sys
+
+def print_tb(tb, limit = None):
+       if limit is None:
+               if hasattr(sys, 'tracebacklimit'):
+                       limit = sys.tracebacklimit
+       n = 0
+       while tb is not None and (limit is None or n < limit):
+               f = tb.tb_frame
+               lineno = tb.tb_lineno
+               co = f.f_code
+               filename = co.co_filename
+               name = co.co_name
+               print '  File "%s", line %d, in %s' % (filename, lineno, name)
+               line = linecache.getline(filename, lineno)
+               if line: print '    ' + string.strip(line)
+               tb = tb.tb_next
+               n = n+1
+
+def extract_tb(tb, limit = None):
+       if limit is None:
+               if hasattr(sys, 'tracebacklimit'):
+                       limit = sys.tracebacklimit
+       list = []
+       n = 0
+       while tb is not None and (limit is None or n < limit):
+               f = tb.tb_frame
+               lineno = tb.tb_lineno
+               co = f.f_code
+               filename = co.co_filename
+               name = co.co_name
+               line = linecache.getline(filename, lineno)
+               if line: line = string.strip(line)
+               else: line = None
+               list.append(filename, lineno, name, line)
+               tb = tb.tb_next
+               n = n+1
+       return list
+
+def print_exception(type, value, tb, limit = None):
+       print 'Traceback (innermost last):'
+       print_tb(tb, limit)
+       print type,
+       if value is not None: print ':', value,
+       print
+
+def print_exc(limit = None):
+       print_exception(sys.exc_type, sys.exc_value, sys.exc_traceback,
+                       limit)
+
+def print_last(limit = None):
+       print_exception(sys.last_type, sys.last_value, sys.last_traceback,
+                       limit)