Python, отлаживающий [закрытые] подсказки

Вы можете использовать приведенный ниже простой метод сортировки:

datatable.DefaultView.Sort = "Col2 ASC,Col3 ASC,Col4 ASC";

С помощью вышеуказанного метода вы сможете отсортировать N столбцов.

164
задан 8 revs, 5 users 40%unknown 23 May 2017 в 12:17
поделиться

12 ответов

PDB

You can use the pdb module, insert pdb.set_trace() anywhere and it will function as a breakpoint.

>>> import pdb
>>> a="a string"
>>> pdb.set_trace()
--Return--
> <stdin>(1)<module>()->None
(Pdb) p a
'a string'
(Pdb)

To continue execution use c (or cont or continue).

It is possible to execute arbitrary Python expressions using pdb. For example, if you find a mistake, you can correct the code, then type a type expression to have the same effect in the running code

ipdb is a version of pdb for IPython. It allows the use of pdb with all the IPython features including tab completion.

It is also possible to set pdb to automatically run on an uncaught exception.

Pydb was written to be an enhanced version of Pdb. Benefits?

139
ответ дан 23 November 2019 в 21:11
поделиться

В Vim у меня есть три привязки:

map <F9> Oimport rpdb2; rpdb2.start_embedded_debugger("asdf") #BREAK<esc>
map <F8> Ofrom nose.tools import set_trace; set_trace() #BREAK<esc>
map <F7> Oimport traceback, sys; traceback.print_exception(*sys.exc_info()) #TRACEBACK<esc>

rpdb2 - это удаленный отладчик Python, который можно использовать с WinPDB, надежным графическим отладчиком. Поскольку я знаю, что вы спросите, он может делать все, что я ожидаю от графического отладчика :)

Я использую pdb из носа.tools , чтобы я мог отлаживать модульные тесты а также обычный код.

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

7
ответ дан 23 November 2019 в 21:11
поделиться

Winpdb очень хорош и, вопреки своему названию, полностью кроссплатформенный.

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

12
ответ дан 23 November 2019 в 21:11
поделиться

PyDev

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

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

15
ответ дан 23 November 2019 в 21:11
поделиться

Ведение журнала

В Python уже есть отличный встроенный модуль . Вы можете использовать здесь шаблон журнала .

Модуль ведения журнала позволяет вам указать уровень важности; во время отладки вы можете регистрировать все, в то время как при нормальной работе вы можете регистрировать только важные вещи. Вы можете выключать и включать вещи.

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

Это может быть лучший способ отладки программ, которые должны делать что-то быстро, например сетевых программ, которые должны реагировать перед другой конец сетевого подключения прерывается и отключается. Возможно, у вас не будет много времени на пошаговое выполнение отладчика; но вы можете просто запустить свой код и записать все в журнал, а затем просмотреть журналы и выяснить, что на самом деле происходит.

РЕДАКТИРОВАТЬ: исходный URL-адрес для шаблонов был: http://aymanh.com/python -debugging-technologies

Эта страница отсутствует, поэтому я заменил ее ссылкой на снимок, сохраненный на archive.org: http://web.archive.org/web/20120819135307/http://aymanh. com / python-debugging-methods

На случай, если он снова исчезнет, ​​вот шаблоны, которые я упомянул. Это код из блога; Я не писал это.

import logging
import optparse

LOGGING_LEVELS = {'critical': logging.CRITICAL,
                  'error': logging.ERROR,
                  'warning': logging.WARNING,
                  'info': logging.INFO,
                  'debug': logging.DEBUG}

def main():
  parser = optparse.OptionParser()
  parser.add_option('-l', '--logging-level', help='Logging level')
  parser.add_option('-f', '--logging-file', help='Logging file name')
  (options, args) = parser.parse_args()
  logging_level = LOGGING_LEVELS.get(options.logging_level, logging.NOTSET)
  logging.basicConfig(level=logging_level, filename=options.logging_file,
                      format='%(asctime)s %(levelname)s: %(message)s',
                      datefmt='%Y-%m-%d %H:%M:%S')

  # Your program goes here.
  # You can access command-line arguments using the args variable.

if __name__ == '__main__':
  main()

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


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

$ ./your-program.py --logging=debug

Чтобы отправить сообщения журнала в файл с именем debug.log, используйте:

$ ./your-program.py --logging-level=debug --logging-file=debug.log

33
ответ дан 23 November 2019 в 21:11
поделиться

Если вы используете pdb, вы можете определить псевдонимы для ярлыков. Я использую эти:

# Ned's .pdbrc

# Print a dictionary, sorted. %1 is the dict, %2 is the prefix for the names.
alias p_ for k in sorted(%1.keys()): print "%s%-15s= %-80.80s" % ("%2",k,repr(%1[k]))

# Print the instance variables of a thing.
alias pi p_ %1.__dict__ %1.

# Print the instance variables of self.
alias ps pi self

# Print the locals.
alias pl p_ locals() local:

# Next and list, and step and list.
alias nl n;;l
alias sl s;;l

# Short cuts for walking up and down the stack
alias uu u;;u
alias uuu u;;u;;u
alias uuuu u;;u;;u;;u
alias uuuuu u;;u;;u;;u;;u
alias dd d;;d
alias ddd d;;d;;d
alias dddd d;;d;;d;;d
alias ddddd d;;d;;d;;d;;d
40
ответ дан 23 November 2019 в 21:11
поделиться

По возможности я отлаживаю, используя Mx pdb в emacs для отладки на уровне исходного кода.

1
ответ дан 23 November 2019 в 21:11
поделиться

ipdb is like pdb, with the awesomeness of ipython.

19
ответ дан 23 November 2019 в 21:11
поделиться

It is possible to print what Python lines are executed (thanks Geo!). This has any number of applications, for example, you could modify it to check when particular functions are called or add something like ## make it only track particular lines.

code.interact takes you into a interactive console

import code; code.interact(local=locals())

If you want to be able to easily access your console history look at: "Can I have a history mechanism like in the shell?" (will have to look down for it).

Auto-complete can be enabled for the interpreter.

20
ответ дан 23 November 2019 в 21:11
поделиться

print statements

  • Some people recommend a debug_print function instead of print for easy disabling
  • The pprint module is invaluable for complex structures
17
ответ дан 23 November 2019 в 21:11
поделиться

Определение полезных методов repr () для ваших классов (чтобы вы могли видеть, что такое объект) и использование repr () или " % r "% (...) или" ... {0! r} .. ". format (...) в ваших отладочных сообщениях / журналах IMHO является ключом к эффективной отладке.

Кроме того, отладчики, упомянутые в других ответах, будут использовать методы repr ().

4
ответ дан 23 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: