2015-08-03 3 views
2

Я работаю с унаследованной программой Python, которая работает нормально, но не имеет правильного отступов Python.Оператор Python if без отступа

if not arg_o: 
print >> sys.stderr, 'Output file needed.' 
print >> sys.stderr, usage 
exit() 

Что здесь происходит? Не следует ли отступать код , если?

решаемые

Смотрите принятый ответ. Оказывается, TextMate неправильно отображал вкладки, что вызывает беспокойство. Когда он был открыт в Vim, он был правильно отстроен.

+0

У вас нет ошибки при попытке запустить ее? – putvande

+1

Вы уверены, что код python? что такое '>>'? –

+0

Программа запускает и производит вывод. Я не знаю, идет ли речь об этой ветке. Прежде чем попытаться реорганизовать его, я хочу понять, как он может работать. – ardochhigh

ответ

8

После проверки файла - MPprimer.py - от найденного кода here.

Я вижу следующие строки в нем -

if not arg_o: 
    print >> sys.stderr, 'Output file needed.' 
    print >> sys.stderr, usage 
    exit() 

Начиная со строки 175. Проблема заключается в том, что этот скрипт смешивает вкладки и пробелы.

Линия 175 - if not arg_o: - использует 4 пробела в качестве отступа.

тогда как следующая строка, строка 176 - print >> sys.stderr, 'Output file needed.' - использует вкладку как отступ.

В Python 2.x, вкладки и пробелы могут быть смешаны, но вкладка внутренне представлена ​​8 пробелами.

Но в некоторых редакторах (например, Notepad ++, в моей системе) вкладка интерпретируется только как 4 пробела. Так что, хотя в этих редакторах они выглядят так, как будто они неправильно отступы, на самом деле они правильно отступы, согласно python.

Обратите внимание, что смешивать вкладки и пробелы, Python 3.x, не рекомендуется, если вы смешаете их в том же скрипте.

+0

Спасибо, что нашли время проверить. Я вижу только вкладки для каждой из этих строк. Я использую TextMate. – ardochhigh

+1

Зайдите в другой редактор. –

+0

Ничего себе, вы правы! Он отлично выглядит, когда я открываю его на Vim на Linux. Большое вам спасибо за решение этого. – ardochhigh

0

Python documentation говорит, что это неправильно. Это должно быть так:

if not arg_o: 
    print >> sys.stderr, 'Output file needed.' 
    print >> sys.stderr, usage 
exit() 

Возможно, ваш выход поступает из другой части кода.

+0

Это не вопрос. – putvande

+2

ОП спрашивает, как работает код *. Не то, как это исправить - это уже исправлено! ... видимо. –

-1

Python отступы необходимо 4 после того, как пробелы так, если весь блок, если необходимо иметь 4 белых пространств

Кроме печати >> не кажется, что питон код так, обратитесь к https://docs.python.org/2.7/tutorial/introduction.html

+3

Это не нужно _four_, ему просто нужно _some_. Четыре - это соглашение, но эта сумма не является обязательным требованием. –

+1

['print >>' является действительным кодом Python 2.] (https://docs.python.org/2.7/reference/simple_stmts.html#the-print-statement) Он используется для указания дескриптора файла для печати. – jwodder

1

В вашем случае, пробел перед if - это 4 пробела, до print это вкладка. Ваш редактор может отображать вкладку как нечто иное, чем Python ее интерпретирует.

0

Да, короткий ответ на ваш вопрос - это код после того, как оператор If должен быть отступом для подбора правильных отступов python.

Смежные вопросы