[Python-checkins] r74433 - in python/branches/tk_and_idle_maintenance/Lib/idlelib: PyShell.py ScriptBinding.py run.py

guilherme.polo python-checkins at python.org
Thu Aug 13 21:46:47 CEST 2009


Author: guilherme.polo
Date: Thu Aug 13 21:46:46 2009
New Revision: 74433
Log:
Mask the name of temporary files in a possible traceback.
Modified:
 python/branches/tk_and_idle_maintenance/Lib/idlelib/PyShell.py
 python/branches/tk_and_idle_maintenance/Lib/idlelib/ScriptBinding.py
 python/branches/tk_and_idle_maintenance/Lib/idlelib/run.py
Modified: python/branches/tk_and_idle_maintenance/Lib/idlelib/PyShell.py
==============================================================================
--- python/branches/tk_and_idle_maintenance/Lib/idlelib/PyShell.py	(original)
+++ python/branches/tk_and_idle_maintenance/Lib/idlelib/PyShell.py	Thu Aug 13 21:46:46 2009
@@ -685,8 +685,9 @@
 else:
 return None
 
- def showtraceback(self):
- "Extend base class method to reset output properly"
+ def showtraceback(self, temp_filename=None):
+ """Extend base class method to reset output properly and print an
+ customized traceback."""
 self.tkconsole.resetoutput()
 self.checklinecache()
 
@@ -697,7 +698,13 @@
 tblist = traceback.extract_tb(tb)
 del tblist[:1]
 sys.stderr.write('\nTraceback (most recent call last):\n')
- traceback
+ if temp_filename is not None:
+ # Replace the name of the temporary file by 'Untitled'
+ new_tb = []
+ for t in tblist:
+ fname = 'Untitled' if t[0] == temp_filename else t[0]
+ new_tb.append((fname, ) + t[1:])
+ tblist = new_tb
 # Highlight only topmost exception
 first, rest = [tblist[0]], tblist[1:]
 traceback.print_list(first, file=sys.stderr)
@@ -727,7 +734,7 @@
 exec code in self.locals
 return 1
 
- def runcode(self, code):
+ def runcode(self, code, tempname=None):
 "Override base class method"
 if self.tkconsole.executing:
 self.interp.restart_subprocess()
@@ -740,7 +747,7 @@
 self.tkconsole.beginexecuting()
 if not debugger and self.rpcclt is not None:
 self.active_seq = self.rpcclt.asyncqueue("exec", "runcode",
- (code,), {})
+ (code, tempname), {})
 elif debugger:
 debugger.run(code, self.locals)
 else:
@@ -768,7 +775,7 @@
 self.tkconsole.canceled = False
 print >>self.tkconsole.stderr, "KeyboardInterrupt"
 else:
- self.showtraceback()
+ self.showtraceback(tempname)
 finally:
 if not use_subprocess:
 try:
Modified: python/branches/tk_and_idle_maintenance/Lib/idlelib/ScriptBinding.py
==============================================================================
--- python/branches/tk_and_idle_maintenance/Lib/idlelib/ScriptBinding.py	(original)
+++ python/branches/tk_and_idle_maintenance/Lib/idlelib/ScriptBinding.py	Thu Aug 13 21:46:46 2009
@@ -178,9 +178,11 @@
 # XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still
 # go to __stderr__. With subprocess, they go to the shell.
 # Need to change streams in PyShell.ModifiedInterpreter.
- interp.runcode(code)
 if is_temp:
+ interp.runcode(code, filename)
 interp.tkconsole.append_cleanup_func(self._cleanup_temp, filename)
+ else:
+ interp.runcode(code)
 return 'break'
 
 def getfilename(self):
Modified: python/branches/tk_and_idle_maintenance/Lib/idlelib/run.py
==============================================================================
--- python/branches/tk_and_idle_maintenance/Lib/idlelib/run.py	(original)
+++ python/branches/tk_and_idle_maintenance/Lib/idlelib/run.py	Thu Aug 13 21:46:46 2009
@@ -146,7 +146,7 @@
 tkMessageBox.showerror("IDLE Subprocess Error", "Socket Error: %s" % err[1])
 root.destroy()
 
-def print_exception():
+def print_exception(temp_filename=None):
 import linecache
 linecache.checkcache()
 flush_stdout()
@@ -158,6 +158,13 @@
 exclude = ("run.py", "rpc.py", "threading.py", "Queue.py",
 "RemoteDebugger.py", "bdb.py")
 cleanup_traceback(tbe, exclude)
+ if temp_filename is not None:
+ # Replace the name of the temporary file by 'Untitled'
+ new_tbe = []
+ for t in tbe:
+ fname = 'Untitled' if t[0] == temp_filename else t[0]
+ new_tbe.append((fname, ) + t[1:])
+ tbe = new_tbe
 # Highlight only topmost exception
 first, rest = [tbe[0]], tbe[1:]
 traceback.print_list(first, file=efile)
@@ -291,7 +298,7 @@
 self.calltip = CallTips.CallTips()
 self.autocomplete = AutoComplete.AutoComplete()
 
- def runcode(self, code):
+ def runcode(self, code, temp_filename=None):
 global interruptable
 try:
 self.usr_exc_info = None
@@ -305,7 +312,7 @@
 if quitting:
 exit()
 # even print a user code SystemExit exception, continue
- print_exception()
+ print_exception(temp_filename)
 jit = self.rpchandler.console.getvar("<<toggle-jit-stack-viewer>>")
 if jit:
 self.rpchandler.interp.open_remote_stack_viewer()


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /