bpo-35931: Gracefully handle SyntaxError in pdb debug command (GH-11782)
Previously, `debug print(` would cause the interpreter to exit on a SyntaxError whereas `print(` would properly display the error and return to the pdb prompt.
This patch fixes this by pre-compiling the code before passing it to `Pdb.run`.
https://bugs.python.org/issue35931
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 60bdb76..1443f9f 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -1093,10 +1093,16 @@
sys.settrace(None)
globals = self.curframe.f_globals
locals = self.curframe_locals
+ try:
+ code = compile(arg, "<string>", "exec")
+ except SyntaxError:
+ exc_info = sys.exc_info()[:2]
+ self.error(traceback.format_exception_only(*exc_info)[-1].strip())
+ return
p = Pdb(self.completekey, self.stdin, self.stdout)
p.prompt = "(%s) " % self.prompt.strip()
self.message("ENTERING RECURSIVE DEBUGGER")
- sys.call_tracing(p.run, (arg, globals, locals))
+ sys.call_tracing(p.run, (code, globals, locals))
self.message("LEAVING RECURSIVE DEBUGGER")
sys.settrace(self.trace_dispatch)
self.lastcmd = p.lastcmd