compile() and comments
Fuzzyman
fuzzyman at gmail.com
Mon Oct 13 08:35:44 EDT 2008
Hello Ed,
It is certainly an odd restriction, but the docs for compile [1] do
explicitly state that the input must be newline terminated.
When compiling multi-line statements, two caveats apply: line
endings must be represented by a single newline character ('\n'), and
the input must be terminated by at least one newline character.
I always throw an extra newline onto any input to compile. I think the
behaviour maybe for detecting incomplete statements when you pass in
the obscure 'don't imply dedent' flag for interactive interpreter
loops.
[1] http://www.python.org/doc/2.5.2/lib/built-in-funcs.html
Michael Foord
On Oct 13, 1:06 pm, Ed Leafe <e... at leafe.com> wrote:
> I've noticed an odd behavior with compile() and code that does not
> contain a trailing newline: if the last line is a comment inside of
> any block, a syntax error is thrown, but if the last line is a non-
> comment Python statement, there is no error. Here's an example (using
> 2.5.1 on OS X)
>
> >>> txt = """
> ... def foo():
> ... print 'bar' """
> >>> compcode = compile(t.strip(), "", "exec")
> >>> compcode
> <code object <module> at 0x79608, file "", line 2>
>
> >>> txt += " # Comment on last line"
> >>> compcode = compile(txt.strip(), "", "exec")
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "", line 4
> # Comment on last line
> ^
> SyntaxError: invalid syntax
> >>> compcode = compile(txt.strip() + "\n", "", "exec")
> >>> compcode
> <code object <module> at 0x79a40, file "", line 2>
>
> Obviously the easy workaround is to add a newline and all is well, so
> this isn't a show-stopper, but is this a bug?
>
> -- Ed Leafe
--
http://www.ironpythoninaction.com/
More information about the Python-list
mailing list