python没有更好的方法来获取调试函数中的表达式吗

2024-04-26 00:16:29 发布

您现在位置:Python中文网/ 问答频道 /正文

在c代码中,我经常使用printf调试宏,比如

#define DPRINT_INT(i) fprintf(stderr,"%s has the value %i at line %i", #i,i, __LINE__)

然后我就可以像 高度(DPRINT) 它将打印变量或类似 DPRINT_INT(从_cm_到_inch(获得平均高度(高度))) 它会打印出名字的整个表达式。在

因为python没有类似c的宏

我传递一个字符串并使用inspect获取调用eval的调用函数环境。 但是我不喜欢传递字符串,它丑陋而且容易忘记(我让它检查类型,如果它被传递为非字符串,就调用一个异常),并且不能很好地与ide一起工作。在

没有任何方法可以从python代码中提取调试函数的变量名和表达式?有?在


Tags: the字符串代码高度value表达式stderrline
1条回答
网友
1楼 · 发布于 2024-04-26 00:16:29

在Python中,我们倾向于编写可以unittest和/或导入到REPL中的模块,并在必要时驱动它们。在

如果你能对你的函数进行单元测试,你就可以证明它们对任何给定输入的行为。但是,如果必须编写调试语句,则应使用标准^{}模块中的^{}。在

例如:

#!/usr/bin/env python

import logging
import inspect

def buggy_fn():
    d = 42;
    if d != 69:
        logging.debug('%s(%d): %s is not what we expected. [%s]',
                inspect.currentframe().f_back.f_code.co_filename,
                inspect.currentframe().f_back.f_lineno,
                'd',
                repr(d),
                )

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG)
    buggy_fn()

将输出

^{pr2}$

^{}里有很多有用的东西可以在你需要的时候帮助你。在

相关问题 更多 >