diff --git a/Lib/code.py b/Lib/code.py index f7e275d8801b7c..2d5b5cdc8f58be 100644 --- a/Lib/code.py +++ b/Lib/code.py @@ -263,6 +263,7 @@ def interact(self, banner=None, exitmsg=None): try: while True: try: + received_eof = False if more: prompt = sys.ps2 else: @@ -270,8 +271,26 @@ def interact(self, banner=None, exitmsg=None): try: line = self.raw_input(prompt) except EOFError: - self.write("\n") - break + received_eof = True + if received_eof: + if more: + source = "\n".join(self.buffer) + try: + code = self.compile.compiler( + source, + self.filename, + "single", + incomplete_input=False, + ) + self.runcode(code) + self.write("\n") + except (SyntaxError, IndentationError): + self.showsyntaxerror(self.filename, source=source) + self.resetbuffer() + more = False + else: + self.write("\n") + break else: more = self.push(line) except KeyboardInterrupt: diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-10-09-19-37-05.gh-issue-139875.pg95dm.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-10-09-19-37-05.gh-issue-139875.pg95dm.rst new file mode 100644 index 00000000000000..8d5dd6e7121a30 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-10-09-19-37-05.gh-issue-139875.pg95dm.rst @@ -0,0 +1,2 @@ +Fix difference in Ctrl+D handling between :func:`code.interact` and the Python +REPL. Patch by Adam Hartz