2015-07-28 2 views
3

Я только что получил новый MackBook Pro и установил Python 3.4. Я побежал терминал и набралПочему я получаю «SyntaxError:» на OS X Python 3.4?

python3.4 

я получил:

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 

я напечатал:

>>> print("Hello world") 
Hello world 

Все хорошо, но когда я пытался сделать что-то немного более сложным, я побежал в неприятности, я сделал:

>>>counter = 5 
>>> 
>>> while counter > 0: 
...  counter -= 1 
...  print() 
... print("Hello World") 

я получаю ошибку:

File "<stdin>", line 4 
print("Hello World") 
    ^
SyntaxError: invalid syntax 

Я думаю, что ошибка на «печать („Hello World“)», но я понятия не имею, о том, почему, мне не нужно, чтобы отступы, если Я хочу, чтобы он работал после завершения цикла. Любая помощь будет оценена.

+1

Вы должны сделать две линии! – Clodion

+1

Глупый переводчик. Это даже не правильная ошибка. Это должно быть 'IndentationError'! –

+0

Получите ipython для себя –

ответ

4

Обратите внимание на приглашение «...»? Это говорит вам, что интерактивный интерпретатор знает, что вы в блоке. Вам нужно будет ввести пустую строку для завершения блока, прежде чем делать окончательную инструкцию печати.

Это артефакт для интерактивного запуска - пустая строка не требуется при вводе кода в файл.

+0

, но как мне запустить 'print (« Hello World »)' без необходимости запускать 'while'? Нужно ли мне потом строить функцию, если я хочу объединить их один за другим? – lokilindo

+0

@lokilindo: Вы не можете. Я предполагаю, что именно поэтому вы отменили окончательный отпечаток. Если вы хотите, чтобы он был частью цикла, отступом он должен быть в цикле. Если вы хотите это сделать, введите пустую строку. Будет запущен цикл while, после чего запустится окончательный оператор печати. Вот как работает интерактивный режим. –

-2

Вы должны использовать пространство для отступов (и «;» для разделения двух команд:.

>>> counter = 5 
>>> while counter > 0: 
    counter -= 1 
    print("Hello") 


Hello 
Hello 
Hello 
Hello 
Hello 
>>> 
+0

OP _is_ использует пробелы для отступов. Я думаю, вы упустили суть вопроса. Обычно удаление одного уровня отступов заканчивается блоком, но оно не выполняется в интерактивном режиме. –

+0

Пожалуйста, почему «-1»? Заранее спасибо – Clodion

+0

@BryanOakley: Поэтому я попытаюсь объяснить это в ответе. Но иногда вкладка не работает хорошо в оболочке, но пространство работает повсюду. И для того, чтобы отделить инструкцию, вы должны использовать «;». Нет? Я не прав? – Clodion

1

Потому что это ошибка синтаксиса

>>> while counter > 0: 
...  counter -= 1 
...  print() 
... print("Hello World") 

это как работает питон консоли - вы можете что у вас есть три точки перед печатью («hello world»), что указывает на то, что python все еще ожидает indendted код, принадлежащий блоку while.

Вам нужно дважды нажать Enter, чтобы перейти в нормальный режим. (Signalized by >>>). Также в будущем, если вы сталкиваетесь с подобными проблемами, всегда пытайтесь запустить их из файла, а не только из консоли.

0

Это связано с причудой интерактивного режима python, который обрабатывает новые строки специально.

Когда у вас есть ... подсказка, это обязательно последует продолжение предыдущего составного оператора, а не в начале нового заявления, которое было бы в не интерактивном режиме. Нажмите еще раз, чтобы сделать приглашение ....


Observer, что это не поможет:

echo $'while False: pass\npass' | python -i 

Но это работает:

echo $'while False: pass\npass' | python 

Вы можете прочитать мельчайшие детали in the grammar reference.Интерактивный вход использует начальное состояние single_input, а неинтерактивный вход использует начальное состояние file_input.