2010-03-22 2 views
4

В Python существует ли необходимость принудительного использования пробелов или вкладок вкладок на основе каждого файла?Использовать «пробелы» или «вкладки» только в файлах python?

Ну, возможно, «принуждение» слишком сильное, больше похоже на «рекомендацию».

Я продолжаю получать файлы патчей со смешанным отступом, и это раздражает ... (по меньшей мере) сам Python может сказать, когда есть проблема, но я ищу что-то для этого на уровне редактора, существует для кодировки.

Редактировать: Хорошо, мой вопрос был не ясен, я спрашиваю об этом, потому что я постоянно получаю исправления и исправления в любом сочетании вкладок/пространства, которое вы можете себе представить. Я использую Mercurial как DVCS, возможно, что-то существует на этом уровне?

+0

должен быть крючок где-то, через который проходят все входящие файлы. Вы должны добавить там скрипт tabs2spaces. Или просто поговорите с людьми, отправляющими вам патчи - если основной скрипт использует пробелы, они неверны, чтобы отправлять вам патчи с вкладками. – fastmultiplication

ответ

10

Тим Петерс написал отличный сценарий под названием reindent.py, который преобразует файлы .py для использования отступов в 4 пробела и без вкладок. Он доступен here, но сначала проверьте свой дистрибутив - он, возможно, пришел в каталог примеров или инструментов. (На последнем LTS Ubuntu он предоставляется пакетом python2.7-examples.)

Если вы можете настроить крюк Mercurial, вы можете запустить все файлы с помощью reindent.py.

Кстати, если вы используете unix, то ваша система также может иметь команду expandunexpand), которая преобразует все вкладки в пробелы (и пробелы на вкладки). Однако в этом случае я считаю, что reindent.py - правильный инструмент.

+0

+1, любовь reindent. Кстати, вы можете порекомендовать s/thing, подобную Javascript, HTML, CSS, ...? Не семантически важно, но в проектах мультиавтоматики, занимающихся многими из них, я нахожу, что необычные сочетания стиля раздражают - и я в основном использую hg в эти дни! -) –

+0

@Alex: О, как бы я хотел предложить вам что-то умное, но увы, у меня нет хорошего предложения. – unutbu

5

Посмотрите на модуль tabnanny: - обнаружение неоднозначного отступа.

2

Это то, что ваш редактор должен сделать для вас. Большинство редакторов (попробуйте Notepad ++, например, бесплатно) позволят вам установить, вводит ли табуляция вкладку или символ пробела. Я бы рекомендовал использовать два пробела вместо вкладок во всех файлах (я считаю, что это слишком много). Использование пробелов вместо вкладок лучше, так как это означает, что вы можете создавать отступы, используя как клавиши пробела &, не беспокоясь о том, чтобы испортить ваши файлы.

Если у вас есть файлы, которые имеют соединение это не трудно написать свой собственный сценарий, чтобы преобразовать табуляции в пробелы

+0

Вопрос не в том, как правильно писать код отступа, который автор пишет, а для исправления исправлений, отправленных из сторонних авторов. Кроме того, нет необходимости писать сценарий, когда существуют такие инструменты, как «expand» и «reindent.py». –

2

Как explicited в PEP 8, никогда не смешивайте вкладки и пространства. Тем не менее, файл с обоими может просто запустить ... Как там сказано:

The most popular way of indenting Python is with spaces only. The 
second-most popular way is with tabs only. Code indented with a mixture 
of tabs and spaces should be converted to using spaces exclusively. 
When invoking the Python command line interpreter with the -t option, it issues 
warnings about code that illegally mixes tabs and spaces. When using -tt 
these warnings become errors. These options are highly recommended! 

решение поэтому использовать по умолчанию:

python -t my_mixed_code.py 

Чтобы ответить на уровень редактора, это зависит от редактора, пожалуйста, укажите!

+0

Существует директива редактора, которая затем устанавливает кодировку символа файла, например «# - * - кодирование: utf-8 - * -», чтобы сохранить текст как utf-8.Возможно, что-то похожее на установку ширины табуляции? – edomaur

+0

Не знаю о полезной опции -t, спасибо – manifest

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