[Python-Dev] #19335 is a codeop, not Idle issue (original) (raw)
Terry Reedy tjreedy at udel.edu
Tue Oct 22 05:49:55 CEST 2013
- Previous message: [Python-Dev] Hashes on same site as download?
- Next message: [Python-Dev] [Python-checkins] cpython: Switch subprocess stdin to a socketpair, attempting to fix issue #19293 (AIX
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I know that many core devs subscribe to the new tracker issues list. If you skipped over http://bugs.python.org/issue19335 because it was (mis) titled as an Idle issue (as I presume most would), you might want to reconsider as it is actually a code and in particular, a codeop issue. Consider the real interpreter.
C:\Programs\Python33>python Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information.
def a(): ... def b(): ... nonlocal c ... _
It waits to see if one enters a blank line (to which it properly responds SyntaxError), or continues with something that makes the statement syntactically valid.
... c = 1 ...
The 'close simulation' in the code module acts differently.
C:\Programs\Python33>python -m code Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:06:53) [MSC v.1600 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole)
def a(): ... def b(): ... nonlocal c File "", line None SyntaxError: no binding for nonlocal 'c' found
It prematurely acts as if one had entered a fourth, blank line.
InteractiveConsole subclasses InteractiveInterpreter (as does Idle, hence the same behavior). II.runsource compiles with codeop.CommandCompile, which wraps codeop._maybe_compile, which returns None (src incomplete), raises (src complete and bad), or returns code (complete and ok) to be executed. For the above code, it re-raises SyntaxError instead of returning None. The issue needs someone who can find and read the C equivalent used by the real interpreter.
Perhaps the latter was adjusted when nonlocal was introduced, while codeop was not.
-- Terry Jan Reedy
- Previous message: [Python-Dev] Hashes on same site as download?
- Next message: [Python-Dev] [Python-checkins] cpython: Switch subprocess stdin to a socketpair, attempting to fix issue #19293 (AIX
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]