打印变量名称和内容作为调试工具;寻找 emacs/Python 快捷方式
·
问题:打印变量名称和内容作为调试工具;寻找 emacs/Python 快捷方式
我发现自己经常添加调试“打印”语句——像这样的东西:
print("a_variable_name: %s" % a_variable_name)
你们都是怎么做到的?我在试图找到一种优化它的方法时是否神经质?我可能正在处理一个函数并放入六行左右的这些行,找出它为什么不起作用,然后再次将它们删掉。
您是否开发了一种有效的方法来做到这一点?
我在 Emacs 中编写 Python 代码。
解答
有时调试器很棒,但有时使用打印语句更快,更容易重复设置和使用。
这可能只适用于使用 CPython 进行调试(因为并非所有 Python 都实现inspect.currentframe和inspect.getouterframes),但我发现这对于减少打字很有用:
在 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('的行。
更多推荐

所有评论(0)