diff --git a/Lib/code.py b/Lib/code.py index ccf2d9d144ca01..b9929685d132ae 100644 --- a/Lib/code.py +++ b/Lib/code.py @@ -13,6 +13,7 @@ __all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact", "compile_command"] + class InteractiveInterpreter: """Base class for InteractiveConsole. @@ -112,7 +113,7 @@ def showsyntaxerror(self, filename=None, **kwargs): sys.last_type = type sys.last_value = value sys.last_traceback = tb - if filename and type is SyntaxError: + if filename and type and issubclass(type, SyntaxError): value.filename = filename # Set the line of text that the exception refers to source = kwargs.pop('source', '') @@ -121,7 +122,8 @@ def showsyntaxerror(self, filename=None, **kwargs): and not value.text and len(lines) >= value.lineno): value.text = lines[value.lineno - 1] if sys.excepthook is sys.__excepthook__: - lines = traceback.format_exception_only(type, value, colorize=colorize) + lines = traceback.format_exception_only( + type, value, colorize=colorize) self.write(''.join(lines)) else: # If someone has set sys.excepthook, we let that take precedence @@ -142,7 +144,8 @@ def showtraceback(self, **kwargs): sys.last_exc = ei[1] try: if sys.excepthook is sys.__excepthook__: - lines = traceback.format_exception(ei[0], ei[1], last_tb.tb_next, colorize=colorize) + lines = traceback.format_exception( + ei[0], ei[1], last_tb.tb_next, colorize=colorize) self.write(''.join(lines)) else: # If someone has set sys.excepthook, we let that take precedence @@ -376,7 +379,7 @@ def interact(banner=None, readfunc=None, local=None, exitmsg=None, local_exit=Fa parser = argparse.ArgumentParser() parser.add_argument('-q', action='store_true', - help="don't print version and copyright messages") + help="don't print version and copyright messages") args = parser.parse_args() if args.q or sys.flags.quiet: banner = '' diff --git a/Lib/test/test_pyrepl/test_pyrepl.py b/Lib/test/test_pyrepl/test_pyrepl.py index a433212fe92ddc..9944cd08dd5162 100644 --- a/Lib/test/test_pyrepl/test_pyrepl.py +++ b/Lib/test/test_pyrepl/test_pyrepl.py @@ -1109,6 +1109,10 @@ def test_correct_filename_in_syntaxerrors(self): self.skipTest("pyrepl not available") self.assertIn("SyntaxError: invalid syntax", output) self.assertIn("", output) + commands = " b\nexit()\n" + output, exit_code = self.run_repl(commands, env=env) + self.assertIn("IndentationError: unexpected indent", output) + self.assertIn("", output) def run_repl( self,