2010-02-26 2 views
3

Исключение интерпретатора Python можно с помощью -tt, чтобы создать исключение TabError, если интерпретируемый файл имеет непоследовательное использование табуляции.SVN pre-commit hook для отклонения файлов Python с несогласованным использованием табуляции

Я пытаюсь написать крюк pre-commit для SVN, который отклоняет файлы, которые создают это исключение. Я могу передать файл, привязанный к python -tt, но моя проблема в том, что файл также выполняется, кроме того, чтобы быть проверенным. Есть ли способ сказать Python «просто проанализировать файл, не запускать его»? Или, может быть, какой-то другой подход был бы лучше для достижения того, что я хочу.

ответ

5

Вы можете сделать это с помощью модуля py_compile:

$ python -tt -c "import py_compile; py_compile.compile('test.py', doraise=True)" 

doraise=True сгенерирует исключение и вернуться с ненулевым кодом завершения, что вы можете легко проверить в вашей предварительной фиксации крюка.

+0

Отличное решение, спасибо! –

2

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

Путь «py_compile» имеет и другое преимущество: он также проверяет синтаксис кода Python, который может быть желательным (хотя и стоит немного вычислительной мощности сервера SVN).

+0

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

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

  • Нет связанных вопросов^_^