Что можно сделать, чтобы сделать мой код на Python запускается в первый раз? [закрытый]


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

16 52

16 ответов:

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

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

интерактивный интерпретатор является прекрасным инструментом для работы с кодом python, и IPython является большим улучшением по сравнению со встроенным REPL (Read Eval Print Loop).

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

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

вот некоторые методы для облегчения отладки в Python:

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

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

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

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

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

  • выполнить pylint иногда.

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

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

можете ли вы осуществлять свой класс в интерактивном режиме?

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

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

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

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

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

  1. затмение с Pydev - если вы уже используете eclipse, это, вероятно, путь. Отладчик работает хорошо, и довольно характерно.
  2. Komodo IDE - легкий интегрированную среду разработки Python. В основном текстовый редактор + отладчик. Это было действительно легко выяснить и быть продуктивным с немедленно.
  3. WinPDB - пробуем это дальше. Выглядит очень характерно, и я могу использовать любой редактор, который я выберу.
  4. PDB - еще не пробовал, так как я читал о том, как WinPDB является лучшей альтернативой.
  5. Ipython с командой % run - Я использовал IPython, но не как отладчик, как это. Мне нужно попробовать это. (Спасибо за совет, Эол)
  6. Eric IDE - тоже в списке пытаться.
  7. олдскульная печать, утверждение утверждений - простое, полезное, но не полное решение.

память - для отладки проблем с памятью я столкнулся с несколькими инструментами:

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

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

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

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

тест рано и тест часто.

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

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

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

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

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

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

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

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

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

есть очень хороший графический эквивалент pdb -Winpdb

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

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

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

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

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

if answer == 42:
    1/0 

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

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

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

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

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

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

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

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

для наиболее интегрированного опыта вы можете использовать полномасштабную IDE, такую как PyCharm:

http://blog.jetbrains.com/pycharm/files/2011/05/template-debug2.pngenter image description here

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

The IPython оболочка Python имеет Это автоматически вызывает отладчик в случае проблемы. Затем вы можете проверять переменные, шаг через код, и т. д.

Вы можете запуск программ от IPython с