Печать имен и содержимого переменных в качестве средства отладки; ищу ярлык emacs / Python - PullRequest
11 голосов
/ 11 мая 2010

Я довольно часто добавляю отладочные операторы "print" - вот так:

print("a_variable_name: %s" % a_variable_name)

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

Вы разработали эффективный способ сделать это?

Я пишу Python в Emacs.

Ответы [ 3 ]

9 голосов
/ 11 мая 2010

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

Это может быть подходящим только для отладки с CPython (поскольку не все Pythons реализуют inspect.currentframe и inspect.getouterframes), но я считаю это полезным для сокращения ввода:

In utils_debug.py:

import inspect    
def pv(name):
    record=inspect.getouterframes(inspect.currentframe())[1]
    frame=record[0]
    val=eval(name,frame.f_globals,frame.f_locals)
    print('{0}: {1}'.format(name, val))

Тогда в вашем script.py:

from utils_debug import pv

С помощью этой настройки вы можете заменить

print("a_variable_name: %s' % a_variable_name)

с

pv('a_variable_name')

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

Чтобы удалить эти строки с помощью Emacs, вы можете

C-x (   # start keyboard macro
C-s pv('
C-a
C-k     # change this to M-; if you just want to comment out the pv call
C-x )   # end keyboard macro

Затем вы можете вызвать макрос один раз с помощью C-x e или тысячу раз с C-u 1000 C-x e

Конечно, вы должны быть осторожны, чтобы действительно удалить все строки, содержащие pv('.

1 голос
/ 11 мая 2010

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

0 голосов
/ 12 мая 2013

Я придумал это:

Реализация интерполяции строки Python

Я просто тестирую его, и он мне пригодится во время отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...