From: Terry Jan Reedy Date: Sat, 5 Sep 2015 23:13:17 +0000 (-0400) Subject: Issue #16180: Exit pdb if file has syntax error, instead of trapping user X-Git-Tag: v2.7.11rc1~178 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=23ae488f23c7955a1b3448590d91b758e552764f;p=thirdparty%2FPython%2Fcpython.git Issue #16180: Exit pdb if file has syntax error, instead of trapping user in an infinite loop. Patch by Xavier de Gaye. --- diff --git a/Lib/pdb.py b/Lib/pdb.py index 113b4e089271..4d35103b90b6 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1322,6 +1322,9 @@ def main(): # In most cases SystemExit does not warrant a post-mortem session. print "The program exited via sys.exit(). Exit status: ", print sys.exc_info()[1] + except SyntaxError: + traceback.print_exc() + sys.exit(1) except: traceback.print_exc() print "Uncaught exception. Entering post mortem debugging" diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index b6dd2b7370dc..b98fe19816f7 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -69,6 +69,17 @@ class PdbTestCase(unittest.TestCase): any('main.py(5)foo()->None' in l for l in stdout.splitlines()), 'Fail to step into the caller after a return') + def test_issue16180(self): + # A syntax error in the debuggee. + script = "def f: pass\n" + commands = '' + expected = "SyntaxError:" + stdout, stderr = self.run_pdb(script, commands) + self.assertIn(expected, stdout, + '\n\nExpected:\n{}\nGot:\n{}\n' + 'Fail to handle a syntax error in the debuggee.' + .format(expected, stdout)) + class PdbTestInput(object): """Context manager that makes testing Pdb in doctests easier.""" diff --git a/Misc/NEWS b/Misc/NEWS index e77ba3449f96..017acc611d54 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -37,6 +37,9 @@ Core and Builtins Library ------- +- Issue #16180: Exit pdb if file has syntax error, instead of trapping user + in an infinite loop. Patch by Xavier de Gaye. + - Issue #22812: Fix unittest discovery examples. Patch from Pam McA'Nulty.