Mercurial > cpython-lru_cache-weakref
diff Lib/idlelib/PyShell.py @ 26771:fc7fdec3fb86 legacy-trunk
1. RPC stack levels were not pruned from traceback unless IDLE was started
from its source directory.
2. Replace final traceback '?' with '-toplevel-'
3. Remove duplicated import boolcheck
| author | Kurt B. Kaiser <kbk@shore.net> |
|---|---|
| date | Tue, 24 Dec 2002 00:57:22 +0000 |
| parents | c1272f3f28f5 |
| children | 240fdbef8c60 |
line wrap: on
line diff
--- a/Lib/idlelib/PyShell.py Tue Dec 24 00:51:05 2002 +0000 +++ b/Lib/idlelib/PyShell.py Tue Dec 24 00:57:22 2002 +0000 @@ -12,8 +12,6 @@ import types import exceptions -import boolcheck - import linecache from code import InteractiveInterpreter @@ -217,7 +215,7 @@ lineno += 1 return lines -# XXX 13 Dec 2020 KBK Not used currently +# XXX 13 Dec 2002 KBK Not used currently # def saved_change_hook(self): # "Extend base method - clear breaks if module is modified" # if not self.get_saved(): @@ -395,15 +393,8 @@ elif how == "EXCEPTION": mod, name, args, tb = what print >>file, 'Traceback (most recent call last):' - while tb and tb[0][0] in ("run.py", "rpc.py"): - del tb[0] - while tb and tb[-1][0] in ("run.py", "rpc.py"): - del tb[-1] - for i in range(len(tb)): - fn, ln, nm, line = tb[i] - if not line and fn.startswith("<pyshell#"): - line = linecache.getline(fn, ln) - tb[i] = fn, ln, nm, line + exclude = ("run.py", "rpc.py") + self.cleanup_traceback(tb, exclude) traceback.print_list(tb, file=file) # try to reinstantiate the exception, stuff in the args: try: @@ -425,6 +416,30 @@ print >>file, errmsg, what self.tkconsole.endexecuting() + def cleanup_traceback(self, tb, exclude): + "Remove excluded traces from beginning/end of tb; get cached lines" + while tb: + for rpcfile in exclude: + if tb[0][0].count(rpcfile): + break # found an exclude, break for: and delete tb[0] + else: + break # no excludes, have left RPC code, break while: + del tb[0] + while tb: + for rpcfile in exclude: + if tb[-1][0].count(rpcfile): + break + else: + break + del tb[-1] + for i in range(len(tb)): + fn, ln, nm, line = tb[i] + if nm == '?': + nm = "-toplevel-" + if not line and fn.startswith("<pyshell#"): + line = linecache.getline(fn, ln) + tb[i] = fn, ln, nm, line + def kill_subprocess(self): clt = self.rpcclt self.rpcclt = None
