summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1994-07-01 15:36:46 (GMT)
committerGuido van Rossum <guido@python.org>1994-07-01 15:36:46 (GMT)
commit526beed88db90729df8bec2957a6c7e12a0f87d8 (patch)
tree69cabd816f5192996422ac744814f0549d15d931 /Lib
parent32d8ba4b085c557e2476fa42728ba68febb80c38 (diff)
downloadcpython-526beed88db90729df8bec2957a6c7e12a0f87d8.zip
cpython-526beed88db90729df8bec2957a6c7e12a0f87d8.tar.gz
cpython-526beed88db90729df8bec2957a6c7e12a0f87d8.tar.bz2
New module, formats traceback just like the C code does
Diffstat (limited to 'Lib')
-rw-r--r--Lib/traceback.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/Lib/traceback.py b/Lib/traceback.py
new file mode 100644
index 0000000..c78d9ad
--- /dev/null
+++ b/Lib/traceback.py
@@ -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)