On Wed, 29 Jun 2022 at 11:00, Rob Cliffe via Python-list <python-list@python.org> wrote: > > On 26/06/2022 23:22, Jon Ribbens via Python-list wrote: > > On 2022-06-26, Rob Cliffe <rob.cli...@btinternet.com> wrote: > >> This 2-line program > >> > >> def f(): pass > >> def g(): pass > >> > >> runs silently (no Exception). But: > >> > >> 23:07:02 c:\>python > >> Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 > >> bit (Intel)] on win32 > >> Type "help", "copyright", "credits" or "license" for more information. > >>>>> def f(): pass > >> ... def g(): pass > >> File "<stdin>", line 2 > >> def g(): pass > >> ^ > >> SyntaxError: invalid syntax > >> Is there a good reason for this? > > For some reason, the REPL can't cope with one-line blocks like that. > > If you put a blank line after each one-block line then it will work. > It's actually not to do with 1-line blocks, just attempting to define 2 > functions "at once": > > > 22:27:23 C:\>python > Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 > bit (Intel)] on win32 > Type "help", "copyright", "credits" or "license" for more information. > >>> def f(): > ... return 42 > ... def g(): > File "<stdin>", line 3 > def g(): > ^ > SyntaxError: invalid syntax > >>> > > But you are right that adding a blank line after the first function > definition solves the "problem".
And if you have something where you want to copy and paste multiple statements, there are a few ways to do it: 1) Put "if 1:" at the top. That makes it a single block, so you can paste in as much as you like, as long as the only blank line is at the end. 2) Put the code into a file and then use "python3 -i setup.py". That runs all the code, then drops you into the REPL in that context. 3) Put the code into a file, and inside the REPL, "from setup import *". Unlike option 2, this can be done after the beginning of the session. Downside: editing setup.py and reimporting won't apply your changes. ChrisA -- https://mail.python.org/mailman/listinfo/python-list