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

Pychecker: анализ кода Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Pychecker – это крутой инструмент для проверки скриптов Python для ошибок. Работает с Python 2.0 – 2.7. В этой статье мы напишем немного дерьмовый код, чтобы увидеть, на каком Pychecker может забрать. Затем мы улучшим код в соответствии с тем, что мы находим, пока код не проверяется. Согласно Pychecker’s Сайт Это может обнаружить следующие проблемы:

  • Не найдено глобального (например, с помощью модуля без импорта)
  • Передача неправильного количества параметров к функциям/методам/конструкторам
  • Передача неправильного количества параметров для встроенных функций и методов
  • Использование формата строк, которые не соответствуют аргументам
  • Используя методы класса и атрибуты, которые не существуют
  • Изменение подписи при переопределении метода
  • Переопределение функции/класса/метода в той же области
  • Использование переменной перед его настройкой
  • Я не первый параметр, определенный для метода
  • Неиспользуемые глобалы и местные жители (модуль или переменная)
  • Неиспользованные функции/аргументы метода (могут игнорировать себя)
  • Нет строки дока в модулях, классах, функциях и методах

Начиная

Мы не будем проверить все, что он может обнаружить, но мы можем сделать довольно много грязный код для Pychecker, чтобы проверить. Давайте начнем кодировать!

import sys

########################################################################
class CarClass:
    """"""

    #----------------------------------------------------------------------
    def __init__(self, color, make, model, year):
        """Constructor"""
        self.color = color
        self.make = make
        self.model = model
        self.year = year
        
        if "Windows" in platform.platform():
            print "You're using Windows!"
            
        self.weight = self.getWeight(1, 2, 3)
        
    #----------------------------------------------------------------------
    def getWeight(this):
        """"""
        return "2000 lbs"

Этот код на самом деле не делает ничего из чего угодно и только для иллюстрации. По словам Pychecker, есть четыре проблемы с этим кодом. Можете ли вы увидеть проблемы? Если нет, то давайте узнаем, как использовать Pychecker, чтобы выставить их! После того, как вы установили Pychecker и поместите его на свой путь (см. Документацию Pychecker), вы сможете сделать следующую команду:

C: \ Пользователи \ Mike \ Documents \ My Dropbox \ Scripts \ Анализ кода> Pychecker Bad.py

ПРИМЕЧАНИЕ. Вышеупомянутые работает только, если у вас есть Pychecker на вашем системном пути в Windows. Технически, на Windows вы будете использовать Pychecker.bat

Если вы сделаете это, вы получите что-то вроде следующего:

Надеюсь, вы можете сказать, что это означает, но мы сломаемся на всякий случай, если вы этого не сделаете. Есть четыре проблемы, которые он определил. Первый вопрос, который он нашел, это то, что мы импортируем sys Модуль, но мы не используем его. Второй вопрос противоположен первым. Мы ссылаемся на платформа Модуль, но он на самом деле не импортируется! В-третьих, мы называем нашими Гетный вес Метод и он сообщает, что мы прошли его слишком много параметров. Я думаю, что Pychecker может иметь ошибку здесь, так как наш метод должен принять один метод, а не ноль. Параметр «Этот» должен запутать Pychecker. К счастью, последняя проблема, которую она находит, это то, что GeteWeight не имеет Я как первый параметр. Этот вид исправлена ошибка, которую я упомянул. Хотя первый метод не требует от нас называть его «я», то есть нормальная конвенция именования для первого параметра в методе класса.

Другие советы

Pychecker не просто работает над командной строкой. Вы также можете использовать его прямо в вашем коде! Все, что вам нужно сделать, это импортировать Pychecker в верхней части вашего модуля, как это:

import pychecker.checker

Это сделает Pychecker проверить все следующие импортируемые модули, хотя он не будет делать основной модуль. Что это обозначает? Это означает, что если вы придерживаетесь этой линии в примере, который мы использовали, вы не увидите никаких ошибок, связанных с этим кодом. Документация Pychecker говорит, что вы также можете установить вариант Pychecker через Os.environ. Вот пример:

os.environ['PYCHECKER'] = 'command line options here'

Говоря о которой, вот общие варианты командной строки:

[Таблица/]

Если вы хотите получить полный список команд, введите следующее: pychecker -h

Примечание. Проверка DOCSTRING PYCHECKER выключается по умолчанию, поэтому, если вы хотите, вам нужно пройти команды «-M -F». Это обнаружило только пустую Docsstring классов модуля. Кажется, есть небольшая ошибка с «-F», в которой они думают, что пустые строки дока в порядке. Я предупредил команду Pychecker к этому.

Обертывание

Я думаю, что Pychecker довольно круто, и похоже, это может быть удобный инструмент. Дайте это попробовать и посмотри, что вы думаете!

Дополнительное чтение

  • Чиновник Pychecker Веб-сайт
  • Пилинт – другой проект, который в том же вене, что и Пычер
  • Pyflakes – еще один аналогичный проект
  • Дуг Хельман Обзор Анализаторов статического кода Python из журнала Python