mirror of
https://github.com/python/cpython.git
synced 2025-08-30 21:48:47 +00:00
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
This commit is contained in:
parent
d375abeb1a
commit
11220fad1d
1 changed files with 27 additions and 12 deletions
|
@ -12,8 +12,6 @@ import traceback
|
|||
import types
|
||||
import exceptions
|
||||
|
||||
import boolcheck
|
||||
|
||||
import linecache
|
||||
from code import InteractiveInterpreter
|
||||
|
||||
|
@ -217,7 +215,7 @@ class PyShellEditorWindow(EditorWindow):
|
|||
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 @@ class ModifiedInterpreter(InteractiveInterpreter):
|
|||
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 @@ class ModifiedInterpreter(InteractiveInterpreter):
|
|||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue