Python:如何从变量获取信息

2024-10-08 21:19:15 发布

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

好吧,这也许是个难题。我不想让你为我做所有的辛苦工作。我只是想得到一些好的建议和我应该从哪里开始。在

我正在编写几个python程序,但调试这些程序时遇到了麻烦。所以我想创建一个简单的调试函数来记录一些事情。在

我会这样使用它:

# Defined in random_function_definitios.py
def some_random_function():
  a = 1 + 1
  debug(a)
  # More stuff

我想在调试中显示以下信息:

  • 调用它的函数:一些随机函数
  • 定义该函数的文件名:random_function_定义.py在
  • 行号:4
  • 一些上下文:定义了全局变量和定义了局部变量。在

我已经看了inspect模块和frame内置对象。但我不太确定我的方向是否正确。在

谢谢你!在


Tags: 函数inpy程序定义def记录function
2条回答

您可以使用Python的标准日志记录工具。大量的数据都有一个日志记录-文档中提供了它们的完整列表:http://docs.python.org/library/logging.html#logrecord-attributes。您需要的是funcNamefilenamelineno。要记录本地变量的转储,可以将其转换为内置函数locals()的字符串输出,并将其用作日志消息。您只需使用记录器,如:

import logging

logger = logging.getLogger('some_module')

def some_random_function():
    a = 1 + 1
    logger.debug(str(locals()))

并使用前面提到的格式属性为其配置适当的格式。所有这些都在基本日志教程中有详细的记录:http://docs.python.org/howto/logging.html#logging-basic-tutorial

编辑

但如果我是你,我会在调试的上下文中启动python debugger,以交互方式检查所有要检查的内容:

^{pr2}$

我自己写的调试器.py包含信息/警告和调试消息。在

参见:https://github.com/unixunion/toolbox/blob/master/python/debugger.py

我还使用回溯来遍历堆栈,如:

except Exception, e:
    # capture the traceback data
    exc_type, exc_value, exc_traceback = sys.exc_info()
    warningMsg("-14 %s" % str(e))
    warningMsg("Exec Traceback")
    traceback.print_tb(exc_traceback, limit=1, file=sys.stdout)
    warningMsg("Exception")
    traceback.print_exception(exc_type, exc_value, exc_traceback, limit=2, file=sys.stdout)
    raise

结果如下:

^{pr2}$

克根

相关问题 更多 >

    热门问题