【发布时间】:2011-12-20 09:09:01
【问题描述】:
在 c 代码中我经常使用 printf 调试宏,例如
#define DPRINT_INT(i) fprintf(stderr,"%s has the value %i at line %i", #i,i, __LINE__)
然后我可以做类似的事情 DPRINT_INT(高度) 它将在哪里打印变量或类似的东西 DPRINT_INT(from_cm_to_inch(get_average(heights))) 它会打印出名称的整个表达式。
要为 python 执行此操作,因为 python 没有类似 c 的宏
我传递一个字符串并使用检查来获取调用函数环境以调用 eval。 但我不喜欢传递字符串,它丑陋且容易忘记(我让它检查类型并在传递非字符串时调用异常)并且在 ide 中效果不佳。
没有办法从调试函数的python代码中提取变量名和表达式吗?有吗?
【问题讨论】:
-
在 Python 中,我们倾向于将我们可以 unittest 和/或
import的模块写入 REPL 并在必要时将它们驱动到那里。在五年的 Python 编程中,我从未使用过调试器。 -
我不是在谈论调试器,尽管 ipython -pdb 很好(ipython 中的异常调试器)。我说的是 printf 调试,即将 debug_print 函数洒在程序中的点上,将其视为日志记录的快速而肮脏的替代方案
-
在这里同意 Johnsyweb:只需输入一些
logging.debug声明即可。模块的导入和配置只有两行,此外它还为您提供了以后轻松禁用日志级别而无需更改代码的好处。
标签: python debugging macros abstract-syntax-tree printf-debugging