Prev: How to generate execute file that include enthought.traits.api, enthought.traits.ui.api ?
Next: Street address parsing in Python, again.
From: _wolf on 4 Jun 2010 13:31 this may not be an earth-shattering deficiency of python, but i still wonder about the rationale behind the following behavior: when i run :: source = """ print( 'helo' ) if __name__ == '__main__': print( 'yeah!' ) #""" print( compile( source, '<whatever>', 'exec' ) ) i get :: File "<whatever>", line 6 # ^ SyntaxError: invalid syntax i can avoid this exception by (1) deleting the trailing ``#``; (2) deleting or outcommenting the ``if __name__ == '__main__':\n print( 'yeah!' )`` lines; (3) add a newline to very end of the source. moreover, if i have the source end without a trailing newline right behind the ``print( 'yeah!' )``, the source will also compile without error. i could also reproduce this behavior with python 2.6, so its not new to the 3k series. i find this error to be highly irritating, all the more since when i put above source inside a file and execute it directly or have it imported, no error will occurwhich is the expected behavior. a ``#`` (hash) outside a string literal should always represent the start of a (possibly empty) comment in a python source; moreover, the presence or absence of a ``if __name__ == '__main__'`` clause should not change the interpretation of a soure on a syntactical level. can anyone reproduce the above problem, and/or comment on the phenomenon? cheers
From: Jerry Hill on 4 Jun 2010 14:42
On Fri, Jun 4, 2010 at 1:31 PM, _wolf <wolfgang.lipp(a)gmail.com> wrote: > Â Â File "<whatever>", line 6 > Â Â Â # > Â Â Â ^ > Â SyntaxError: invalid syntax I believe you're encountering this bug: http://bugs.python.org/issue1184112 It's been fixed for 2.7 and 3.2. Until then, you'll need to work around it. You can either append a newline to the end of any source snippets that you are exec-ing, or if you're writing the code snippets that are being exec-ed yourself, don't write them in such a way that they trigger the bug. -- Jerry |