diff --git a/Lib/pdb.py b/Lib/pdb.py index 60bdb7675c8131..1443f9f85c7e12 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1093,10 +1093,16 @@ def do_debug(self, arg): sys.settrace(None) globals = self.curframe.f_globals locals = self.curframe_locals + try: + code = compile(arg, "", "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 diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 9aa38e08dd6e6c..5b03b47ef468c6 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1482,6 +1482,14 @@ def test_relative_imports_on_plain_module(self): stdout, _ = self._run_pdb(['-m', self.module_name + '.runme'], commands) self.assertTrue(any("VAR from module" in l for l in stdout.splitlines()), stdout) + def test_syntaxerror_in_command(self): + commands = "print(\ndebug print(" + stdout, _ = self.run_pdb_script("", commands) + self.assertEqual(stdout.splitlines()[1:], [ + '(Pdb) *** SyntaxError: unexpected EOF while parsing', + '(Pdb) *** SyntaxError: unexpected EOF while parsing', + '(Pdb) ', + ]) def load_tests(*args): from test import test_pdb diff --git a/Misc/NEWS.d/next/Library/2019-02-07-16-22-50.bpo-35931._63i7B.rst b/Misc/NEWS.d/next/Library/2019-02-07-16-22-50.bpo-35931._63i7B.rst new file mode 100644 index 00000000000000..a229968583d1a4 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-02-07-16-22-50.bpo-35931._63i7B.rst @@ -0,0 +1 @@ +The :mod:`pdb` ``debug`` command now gracefully handles syntax errors. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy