From 4852e09c7914a4d4f2938dddbe155a2075bb2eb3 Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 27 Feb 2015 00:36:39 +0000 Subject: py: Fix adding of traceback so that it appends to existing info. This makes exception traceback info self contained (ie doesn't rely on list object, which was a bit of a hack), reduces code size, and reduces RAM footprint of exception by eliminating the list object. Addresses part of issue #1126. --- tests/misc/print_exception.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/misc/print_exception.py b/tests/misc/print_exception.py index e65b8d1ac..4e23bf154 100644 --- a/tests/misc/print_exception.py +++ b/tests/misc/print_exception.py @@ -6,19 +6,35 @@ else: import traceback print_exception = lambda e, f: traceback.print_exception(None, e, None, file=f) -try: - XXX -except Exception as e: - print('caught') +def print_exc(e): buf = io.StringIO() print_exception(e, buf) s = buf.getvalue() for l in s.split("\n"): # uPy on pyboard prints as file, so remove filename. if l.startswith(" File "): - print(l[:8], l[-23:]) + l = l.split('"') + print(l[0], l[2]) # uPy and CPy tracebacks differ in that CPy prints a source line for # each traceback entry. In this case, we know that offending line # has 4-space indent, so filter it out. elif not l.startswith(" "): print(l) + +# basic exception message +try: + XXX +except Exception as e: + print('caught') + print_exc(e) + +# exception message with more than 1 source-code line +def f(): + g() +def g(): + YYY +try: + f() +except Exception as e: + print('caught') + print_exc(e) -- cgit v1.2.3