Каковы хорошие способы сделать первый код Python первым?

Я получаю довольно много ошибок в моем коде. Следовательно, я хотел бы иметь возможность свести их к минимуму с самого начала или увидеть как можно больше ошибок до выполнения кода. Возможно ли это, и если да, то как я могу это сделать?

Ответ 1

Если у вас возникли проблемы с синтаксисом, вы можете попробовать редактор с подсветкой синтаксиса. Пока вы не почувствуете язык, простые ошибки не просто выскочат на вас.

Простейшей формой отладки является просто вставка некоторых операторов печати. Более продвинутым (и расширяемым) способом сделать это будет использование logging модуля из std lib.

Интерактивный интерпретатор - прекрасный инструмент для работы с кодом python, а IPython - отличное улучшение по сравнению с встроенным REPL ( Прочитайте цикл печати Eval).

Если вы действительно хотите выполнить свой код, отладчик python называется pdb, который можно вызвать из командной строки, или встроенный в ваш код.

Если вы привыкли к полностью интегрированной среде IDE, я бы рекомендовал использовать Eclipse с pydev, а PyCharm имеет отличное коммерческое предложение, с автозаполнением, быстрым доступом к документам и многочисленными ярлыками среди многих других интересных функций.

Ответ 2

Вот несколько способов облегчения отладки в Python:

  • используйте интерактивную оболочку, например ipython. Python - это динамический язык, на котором вы можете изучить свой код при вводе. Оболочка всегда работает во втором окне моего редактора.

  • copy-paste из оболочки в docstrings код, который иллюстрирует доминирующее использование и угловые случаи функции (класс, модуль). doctest.testmod(), помещенный в раздел if __name__=="__main__", позволяет протестировать все docstrings в модуле. doctest можно легко интегрировать с unittest.

  • используйте assert для вещей, которые никогда не могут произойти.

  • print() может решить многие проблемы отладки; logging модуль подходит для долгоживущих процессов python.

  • пишите тесты (не обязательно перед кодом), запускайте их часто (автоматически или с одним нажатием клавиши максимум); nose предоставляет расширенные функции обнаружения и запуска тестов для unittest.

  • запускать pylint изредка.

В этот момент мало используется для формального отладчика python. Winpdb - это внешний многоплатформенный отладчик python GUI GUI, если вам это нужно.

Ответ 3

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

Можете ли вы реализовать свой класс в интерактивном режиме?

Если вы можете делать вещи в интерактивном режиме, вы можете с уверенностью писать unittests и doctests, что они легко проверяются, просты, надежны.

И, что более важно, вы можете исследовать его в интерактивном режиме. Там ничего лучше, чем мгновенное удовлетворение, которое происходит от ввода кода и просмотра того, что происходит.

Скомпилированные языковые привычки (писать кучу вещей, отлаживать кучу вещей, проверять кучу вещей) можно оставить позади. Вместо этого вы можете написать немного материала, изучить его, написать формальный тест, а затем приложить свой маленький материал к вашему растущему финальному проекту.

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

Ответ 4

Python предоставляет отладчик, который позволяет вам выполнять свой код, проверять переменные и манипулировать ими. Обратитесь к http://pythonconquerstheuniverse.wordpress.com/category/python-debugger/, который поможет вам выполнить шаги...

Также проверьте ссылку на стандартную библиотеку python для pdb http://www.python.org/doc/2.5.2/lib/module-pdb.html

Ответ 5

Я новичок в python и пробовал несколько разных отладчиков. Вот варианты, которыми я до сих пор сталкивался:

  • Eclipse with Pydev. Если вы уже используете eclipse, возможно, это путь. Отладчик работает хорошо и довольно функционально.
  • IDE Komodo - легкая среда разработки python. В основном текстовый редактор + отладчик. Было очень легко разобраться и быть продуктивным сразу.
  • WinPDB. Попробуйте следующее. Выглядит очень эффектно, и я использую тот редактор, который я выбираю.
  • PDB. Еще не пробовал, так как я читал о том, как WinPDB является лучшей альтернативой.
  • Ipython с командой% run. Я использовал IPython, но не как отладчик вроде этого. Мне нужно попробовать это. (Спасибо за подсказку, EOL)
  • Eric IDE. Также в списке, чтобы попробовать.
  • Отпечаток в старой школе, утверждение assert. Простое, полезное, но не полное решение.

Отладка памяти. Чтобы отладить проблемы с памятью, я столкнулся с несколькими инструментами:

  • objgraph. Генерирует png ссылочных графов. Ухоженная. Существуют и другие функции, такие как: import objgraph; print (objgraph.show_most_common_types (limit = 10)) будет печатать 10 самых распространенных типов в памяти.
  • gc module - взаимодействовать непосредственно с сборщиком мусора.
  • heapy - анализатор кучи. Например: из guppy import hpy; hp = hpy(); print (hp.heap()) печатает наиболее распространенные типы, их использование в памяти и т.д.

Это очень неполный список, но, надеюсь, это хороший старт.

Ответ 6

Тест на ранних стадиях и тестирование часто.

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

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

Ответ 7

Чаще всего я просто использую кучу операторов печати. ​​

page = grabpage(url)
print "Page content:", page
print "page type():", type(page)

Иногда полезно делать что-то вроде:

debug = True
if debug: print "page content", page

.. с помощью этого вы можете быстро отключить все свои отладочные операторы печати, изменив переменную отладки на False.

В то время как отладка печати в большинстве случаев будет очень далека, иногда бывает сложно отлаживать такие вещи, как циклы, или ряд if/else/try/except/etc. Для этого полезен отладчик, который позволяет выполнять шаговый переход с помощью вашего кода и устанавливать точки останова.

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

Существует очень хороший эквивалент GUI pdb - Winpdb

В основном вы запускаете winpdb myscript --arg 4 -b 4, затем он загружает команду в терминал, показывает ваш код слева, с текущим, список локальных/глобальных переменных (и их значений) и текущий стек вызовов.

Затем вы можете сделать шаг, используя код, нажав кнопку Step (или F6). Код F5 запускает код. Если вы нажмете рядом с номерами строк, он установит точку останова, где код будет автоматически шаг (когда вы нажмете пробег).

Я нахожу его гораздо проще в использовании, и у него есть много дополнительных улучшений (например, удаленная отладка, поэтому вы можете запустить бэкэнд-часть (rpdb2) в отлаживаемом приложении и подключить к ней Winpdb ( зашифрованный), а также поддерживает потоковую передачу и другие полезные вещи, а не PDB. У вас также есть доступ к консоли, подобной pdb.

Ответ 8

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

О, и таким образом вы можете просто создать точку останова в коде, добавив

if answer == 42:
    1/0 

Ответ 9

Использование утверждения assert свободно.

Ответ 10

Идентификация ошибок перед выполнением является областью статической проверки/анализа. Мне посчастливилось использовать PyChecker для базовой статической проверки кода Python.

Сайт pycheesecake имеет очень хорошее сводка инструментов тестирования для Python.

Ответ 11

Плагин PyDev для eclipse - мой выбор. Он распознает простые ошибки синтаксиса и ошибки отступов и подчеркивает ошибку красной линией. Он имеет мощный отладчик и даже имеет плагин под названием PyLint, который предупреждает вас об опасном коде.

Изменить: Он также имеет удобную для пользователя трассировку стека при ошибках во время выполнения, частичное автозаполнение и некоторые другие отличные функции.

Изменить еще раз: Я не заметил, что пидев был упомянут на высшем посту. Надеюсь, я принес что-то еще на стол.

Ответ 12

python -m pdb yourcode.py должен это сделать. В качестве альтернативы вы можете "импортировать pdb" в свой код и использовать pdb.set_trace() для установки точек останова. Обратитесь к руководству за дополнительной информацией: http://www.python.org/doc/2.5.2/lib/module-pdb.html

Ответ 13

Существует очень хороший отладчик GUI для Python, называемый Winpdb. Попробуйте его. Загрузите библиотеку wxWidgets и мультиплатформу.

Ответ 15

Eric4 IDE также имеет отличный встроенный отладчик.

Ответ 16

IPython В оболочке Python есть команда %pdb, которая автоматически вызывает отладчик в случае возникновения проблемы. Затем вы можете просмотреть переменные, пройти через код и т.д.

Вы можете запустить ваши программы с помощью IPython с помощью команды %run.

В более общем плане, как было отмечено в некоторых других ответах, хорошая оболочка Python - ваш друг. И IPython - ваш лучший друг.:)