2010-08-10 2 views
-1

Я никогда не был огромным поклонником Python. Я изучил его для курса, где учитель действительно был в этом, но его энтузиазм никогда не доводил до конца нашего класса: кажется, как только у нас появилась такая возможность, мы все прыгнули на C#/Java.Существуют ли инструменты статического анализа/проверки Python?

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

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

+0

@Hamish Grubijan: правда, что он составлен, но это не дает вам Имя проверки. 'def foo(): print bar' будет« компилироваться »просто отлично и умереть во время выполнения. – zneak

+0

@Hamish Grubijan: Сначала я попытался запустить фрагмент Python, и он ничего не сказал (что ожидалось). Затем я использовал 'clr.CompileModule' для компиляции фрагмента Python, который я вам показал, и он все еще не жаловался. Есть ли другой способ, который заставит IronPython проверять имена перед созданием dll? – zneak

+0

Я не знал, о чем говорю; Полагаю, это было для вас хорошим упражнением. –

ответ

7

«, но что Python не будет беспокоить, чтобы жаловаться, пока не будет слишком поздно "

Дело не в том, что сообщение приходит слишком поздно. Это то, что вы слишком долго ждали использования Python. Не набирайте гору кода, а затем жалуйтесь, что один маленький кусочек плох.

  1. Использовать модульное тестирование. Запишите код до запуска теста.

  2. Использовать python Интерактивно экспериментировать. Вы можете выполнить большую статистическую обработку из приглашения >>>.

  3. Не записывайте длинные скрипты с основной программой. Напишите короткие сценарии - в небольших кусках - и проверьте маленькие кусочки.

+1

Благодарим вас за то, что вы выразили свое мнение о моих способах кодирования. Однако мне это больше не нужно. Я спрашиваю, какие инструменты я могу порекомендовать, чтобы помочь бедным душам. – zneak

+2

@zneak - S. Lott дал вам методики, чтобы естественно использовать покрытие кода в динамически типизированных языках. Старайтесь не быть настолько пренебрежительным к добрым советам, особенно если вы в свою очередь рассчитываете дать совет. –

+0

@zneak: Я дал вам инструменты. Инструменты - это Unit Testing, Interactive Python и изменение стиля. Эти инструменты часто более эффективны, чем статический анализ. Вот подсказка: статические анализаторы по какой-то причине не являются стандартной частью дистрибутива Python. Менее люди используют их. Единичное тестирование является частью распределения по какой-либо причине. Больше людей используют его. –

1

В дополнение к упомянутым ars.

Попробуйте Pydev, у него есть статический анализ кода. Или Pida, который имеет несколько различных инструментов статического анализа.

Или, если вы ищете отдельную библиотеку, попробуйте Rope

+0

Пидев на самом деле не очень хорош. Например, я написал эту строку «Я».myfunction() ', Pydev не смотрит, действительно ли эта функция существует. Если вы пишете 'f (wrong_key = value),' Pydev не смотрит, действительно ли ключ существует. – Hunsu

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