[Spinoff of http://bugs.python.org/issue3559] If you manage to type several simple statements into the prompt (by copy-pasting them, using Ctrl+J, or creative deletion), IDLE runs the first one and silently ignores the rest: >>> x = 1 x = 2 >>> x 1 Moreover, it doesn't even parse the additional lines: >>> x = 3 $@syntax error?! >>> x 3 If the first statement is a compound statement, IDLE refuses with a SyntaxError at the begging of the second statement: >>> def f(): return 42 f() SyntaxError: invalid syntax I believe in both cases the right least-surprise behavior is to run all statements. If not, a clear error explaining that IDLE doesn't support multiple statements must be printed. But I can't see a reason to choose this over making it Just Work. [Implementation: might or might not be related to http://bugs.python.org/issue7741]
In interactive mode, multiline statements are terminated with a blank line. Your examples lacks that, so the 3rd line is part of the def and lacking the proper indent, is indeed a syntax error. You get the same with the standard command-line interpreter. >>> def f(): ... return 42 ... f() File "", line 3 f() ^ SyntaxError: invalid syntax That said, adding a blank line still gives a syntax error in IDLE, instead of ignoring the extra statement, while the interpreter prints 42. IDLE requires an explicit blank line from the keyboard to terminate compound statements; pasted blank lines do not count #3559 (which I now see you commented on - I should have been notified but was not). I suspect you are correct about the dependency on code.InteractiveConsole(), but I have not looked at the IDLE code either. In the meanwhile, either paste multiple statements in the the real interpreter or into an IDLE window and use F5 run.
It seems to me that this bug should be closed as a duplicate of the original bug (#3559). It's the same bug, only the proposed solution is different, unless I'm missing something.
I agree: Implementation note: PyShell.py hass the following line: from code import InteractiveInterpreter That is the base class for InteractiveConsole, the subject of #7741. PyShell makes it own extension class ModifiedInterpreter(InteractiveInterpreter):
To be clearer, this issue is an elaboration of the #3559 report that \n 'does not work' in that it points out that \n silently ignores the second while \n is reported as a syntax error. I agree that this elaboration should have been included there and I am adding a message there.