changeset: 97686:26c4db1a0aea branch: 2.7 parent: 97667:0ff7aa9a438f user: Terry Jan Reedy date: Sat Sep 05 19:13:17 2015 -0400 files: Lib/pdb.py Lib/test/test_pdb.py Misc/NEWS description: Issue #16180: Exit pdb if file has syntax error, instead of trapping user in an infinite loop. Patch by Xavier de Gaye. diff -r 0ff7aa9a438f -r 26c4db1a0aea Lib/pdb.py --- a/Lib/pdb.py Fri Sep 04 10:00:22 2015 -0400 +++ b/Lib/pdb.py Sat Sep 05 19:13:17 2015 -0400 @@ -1322,6 +1322,9 @@ # 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 -r 0ff7aa9a438f -r 26c4db1a0aea Lib/test/test_pdb.py --- a/Lib/test/test_pdb.py Fri Sep 04 10:00:22 2015 -0400 +++ b/Lib/test/test_pdb.py Sat Sep 05 19:13:17 2015 -0400 @@ -69,6 +69,17 @@ 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 -r 0ff7aa9a438f -r 26c4db1a0aea Misc/NEWS --- a/Misc/NEWS Fri Sep 04 10:00:22 2015 -0400 +++ b/Misc/NEWS Sat Sep 05 19:13:17 2015 -0400 @@ -37,6 +37,9 @@ 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.