Автор оригинала: 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 не будет сообщать о тех же ошибках, поскольку проблемы были исправлены.
Смотрите также
- стандартная библиотечная документация для tabnanny
tokenize
– лексический сканер исходного кода Python.- flake8 – модульная программа проверки исходного кода
- pycodestyle – средство проверки руководства по стилю Python
- pylint – статическая проверка кода Python