[3.7] bpo-35931: Gracefully handle any exception in pdb debug command (GH-12103) (GH-12285)



This is relevant for `debug doesnotexist()`, which would crash with a
NameError otherwise.
(cherry picked from commit 3e936431e23b424b1e4665e8165c245924f0ab02)


Co-authored-by: Daniel Hahler <github@thequod.de>


https://bugs.python.org/issue35931
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 1443f9f..bf3219a 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -1093,16 +1093,14 @@
         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, (code, globals, locals))
+        try:
+            sys.call_tracing(p.run, (arg, globals, locals))
+        except Exception:
+            exc_info = sys.exc_info()[:2]
+            self.error(traceback.format_exception_only(*exc_info)[-1].strip())
         self.message("LEAVING RECURSIVE DEBUGGER")
         sys.settrace(self.trace_dispatch)
         self.lastcmd = p.lastcmd