On Fri, 12 Oct 2012 19:04:20 -0400, Etienne Robillard wrote:
> On Fri, 12 Oct 2012 15:51:19 -0700
> Herman <[email protected]> wrote:
>
>> python -c "import os; while True: print('hello')" File "<string>",
>> line 1
>> import os; while True: print('hello')
>> ^
>> SyntaxError: invalid syntax
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>
> You get a syntax error since you didn't used tabs indents in your string
> which is normal for python AFAIK.
Incorrect. Python lets you use either spaces or tabs for indents, and in
this case the SyntaxError is BEFORE the missing indent. He gets
SyntaxError because you can't follow a semicolon with a statement that
begins a block. It's the `while` that causes the error, not the lack of
indent. Here's an example with `if` and an indented block that also
fails:
[steve@ando ~]$ python -c "pass; pass"
[steve@ando ~]$ python -c "pass; if True: pass"
File "<string>", line 1
pass; if True: pass
^
SyntaxError: invalid syntax
Solution: don't use semi-colons, use newlines.
In this example, I use `Ctrl-Q ENTER` to insert a literal newline in the
string, which shows as ^M. Note that you *cannot* just type ^ M (caret
M), that won't work, it must be an actual control character.
[steve@ando ~]$ python -c 'import time^Mwhile True:^M print("hello");
time.sleep(2)'
hello
hello
hello
Traceback (most recent call last):
File "<string>", line 3, in <module>
KeyboardInterrupt
In this example I just hit the Enter key to insert a newline, and let the
shell deal with it. The ">" marks are part of the shell's prompt.
[steve@ando ~]$ python -c "import time
> while True:
> print('hello'); time.sleep(2)"
hello
hello
hello
Traceback (most recent call last):
File "<string>", line 3, in <module>
KeyboardInterrupt
--
Steven
--
http://mail.python.org/mailman/listinfo/python-list