Рубрики
Без рубрики

tabnanny – валидатор отступов

Автор оригинала: Doug Hellmann.

Цель:

Сканируйте исходный код Python на предмет подозрительных отступов.

Последовательное использование отступов важно в таких языках, как Python, где пробелы имеют значение. Модуль tabnanny предоставляет сканер для сообщения о неоднозначном использовании отступов.

Запуск из командной строки

Самый простой способ использовать tabnanny – запустить его из командной строки, передав имена файлов для проверки. Если вы передаете имена каталогов, они рекурсивно сканируются в поисках файлов .py для проверки.

Запуск tabnanny в исходном коде PyMOTW показал один старый модуль с вкладками вместо пробелов.

$ python3 -m tabnanny .
./source/queue/fetch_podcasts.py 65 "    \t\tparsed_url = \
urlparse(enclosure['url'])\n"

В строке 65 fetch_podcasts.py было две табуляции вместо 8 пробелов. Это не было заметно в текстовом редакторе, который был настроен на то, что табуляция была установлена на 4 пробела, поэтому визуально разницы не было.

for enclosure in entry.get('enclosures', []):
            parsed_url  urlparse(enclosure['url'])
            message('queuing {}'.format(
                parsed_url.path.rpartition('/')[-1]))
            enclosure_queue.put(enclosure['url'])

Исправление строки 65 и повторный запуск tabnanny показали еще одну ошибку в строке 66. Последняя проблема обнаружилась в строке 67.

Если вы хотите сканировать файлы, но не видите подробностей об ошибке, используйте параметр -q , чтобы скрыть всю информацию, кроме имени файла.

$ python3 -m tabnanny -q .
./source/queue/fetch_podcasts.py

Чтобы просмотреть дополнительную информацию о сканируемых файлах, используйте параметр -v .

'source/queue/': listing directory
'source/queue/fetch_podcasts.py': *** Line 65: trouble in tab
city! ***
offending line: "    \t\tparsed_url = urlparse(enclosure['url'])
\n"
indent not greater e.g. at tab sizes 1, 2
'source/queue/queue_fifo.py': Clean bill of health.
'source/queue/queue_lifo.py': Clean bill of health.
'source/queue/queue_priority.py': Clean bill of health.

Заметка

Выполнение этих примеров с исходными файлами PyMOTW не будет сообщать о тех же ошибках, поскольку проблемы были исправлены.

Смотрите также