<div class="gmail_quote">On Thu, Dec 15, 2011 at 3:41 AM, Nick Coghlan <span dir="ltr"><<a href="mailto:ncoghlan@gmail.com">ncoghlan@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

There are two steps to what the interactive console does:<br>
<br>
Step 1: accept a block of code.<br>
Step 2: compile and execute it in single statement mode (in order to<br>
get the result of any expressions for display)<br>
<br>
It is the *first* step that is terminated by a blank line. That step<br>
understands almost nothing about Python syntax - just enough to figure<br>
out whether or not it should be asking for a continuation line. (IIRC,<br>
it pretty much just does bracket matching and "if I have seen a ':'<br>
character, ask for continuation lines until one of them is blank".<br></blockquote></div><br>Actually, in CPython at least, the first step uses a special feature of the parser that can tell whether what has been entered so far is complete or not. Try entering a subtle syntax error:<br>

<br>>>> def foo():<br>...   x = 1<br>...   y x<br>  File "<stdin>", line 3<br>    y x<br>      ^<br>SyntaxError: invalid syntax<br>>>> <br><br>It does treat an entirely blank line (with no comment or whitespace) as a dedent all the way back to zero.<br>

<br>The problem with allowing what Anatoly asks for is that the added line could introduce another indented block instead of just a statement.<br><br>Almost all languages with an interactive mode have some kind of syntactic awkwardness or differences. E.g. I recently had problems with Haskell's interactive mode, which won't let you define functions directly -- you must use 'let'; and sqlite3 reads anything until you enter a semicolon. Trying to mess with Python's approach is likely to make things worse in some other way. If you think otherwise, show us the patch.<br>

<br>-- <br>--Guido van Rossum (<a href="http://python.org/~guido">python.org/~guido</a>)<br>