основной вопрос об отступах / отступах на питоне - PullRequest
4 голосов
/ 09 июня 2011

Почему следующий код вызывает ошибку отступа в консоли Python (версия 2.6.5 в моем случае)?Я был убежден, что следующий код был допустимым:

if True:
    print '1'
print 'indentation error on this line'

Если я вставлю пустую строку между блоком if и последним отпечатком, ошибка исчезнет:

if True:
    print '1'

print 'no error here'

Я немного озадачен, из документации мне кажется, что пустые (или только пробелы) строки не должны иметь никакого значения.Есть намеки?

Ответы [ 2 ]

5 голосов
/ 09 июня 2011

Консоль принимает одну инструкцию (несколько строк, если это определение function; if, for, while, ...) для одновременного выполнения.

Здесь: 2 инструкции

                                          _______________
if True:                                # instruction 1  |
    print '1'                           # _______________|
print 'indentation error on this line'  # instruction 2  |
                                          ----------------

Здесь: 2 инструкции, разделенные пустой строкой; Пустая строка похожа, когда вы нажимаете Enter => Отдельная инструкция при исполнении

if True:
    print '1'         # instruction 1
[enter]
print 'no error here' # instruction 1
5 голосов
/ 09 июня 2011

Проблема связана с использованием консоли Python, а не языка Python.Если вы помещаете все в метод, он работает.

Пример:

>>> if True:
...     print '1'
... print 'indentation error on this line'
  File "<stdin>", line 3
    print 'indentation error on this line'
        ^
SyntaxError: invalid syntax
>>> def test():
...     if True:
...         print '1'
...     print 'no indentation error on this line'
... 
>>> test()
1
no indentation error on this line
>>> 
...