[Python-checkins] r83308 - in python/branches/py3k: Lib/pdb.py Misc/NEWS

georg.brandl python-checkins at python.org
Sat Jul 31 00:20:16 CEST 2010


Author: georg.brandl
Date: Sat Jul 31 00:20:16 2010
New Revision: 83308

Log:
Part of #7245: when KeyboardInterrupt is raised while defining commands, restore the old commands instead of producing a traceback.

Modified:
   python/branches/py3k/Lib/pdb.py
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Lib/pdb.py
==============================================================================
--- python/branches/py3k/Lib/pdb.py	(original)
+++ python/branches/py3k/Lib/pdb.py	Sat Jul 31 00:20:16 2010
@@ -371,7 +371,7 @@
         else:
             return self.handle_command_def(line)
 
-    def handle_command_def(self,line):
+    def handle_command_def(self, line):
         """Handles one command line during command list definition."""
         cmd, arg, line = self.parseline(line)
         if not cmd:
@@ -457,14 +457,33 @@
                 self.error("Usage: commands [bnum]\n        ...\n        end")
                 return
         self.commands_bnum = bnum
+        # Save old definitions for the case of a keyboard interrupt.
+        if bnum in self.commands:
+            old_command_defs = (self.commands[bnum],
+                                self.commands_doprompt[bnum],
+                                self.commands_silent[bnum])
+        else:
+            old_command_defs = None
         self.commands[bnum] = []
         self.commands_doprompt[bnum] = True
         self.commands_silent[bnum] = False
+
         prompt_back = self.prompt
         self.prompt = '(com) '
         self.commands_defining = True
         try:
             self.cmdloop()
+        except KeyboardInterrupt:
+            # Restore old definitions.
+            if old_command_defs:
+                self.commands[bnum] = old_command_defs[0]
+                self.commands_doprompt[bnum] = old_command_defs[1]
+                self.commands_silent[bnum] = old_command_defs[2]
+            else:
+                del self.commands[bnum]
+                del self.commands_doprompt[bnum]
+                del self.commands_silent[bnum]
+            self.error('command definition aborted, old commands restored')
         finally:
             self.commands_defining = False
             self.prompt = prompt_back

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Sat Jul 31 00:20:16 2010
@@ -475,6 +475,9 @@
 Library
 -------
 
+- In pdb, when Ctrl-C is entered while defining commands for a
+  breakpoint, the old commands are restored.
+
 - For traceback debugging, the pdb listing now also shows the locations
   where the exception was originally (re)raised, if it differs from the
   last line executed (e.g. in case of finally clauses).


More information about the Python-checkins mailing list