利用loguru打印变量值及错误堆栈信息
Python的loguru日志库提供强大的功能,可以便捷地打印变量值以及错误堆栈信息,这在调试过程中非常实用,而Python自带的traceback模块则无法实现此功能。
loguru巧妙地利用了sys._getframe()函数来访问当前函数的上下文信息,包括变量值。通过操作堆栈帧,它可以获取变量的值,并在打印错误堆栈的同时输出这些变量。
以下示例代码演示了如何在loguru中使用sys._getframe()函数:
import sys import loguru log = loguru.logger def get_trace_info(): print(sys._getframe().f_code.co_filename) # 当前文件名 (也可使用__file__) print(sys._getframe(0).f_code.co_name) # 当前函数名 print(sys._getframe(1).f_code.co_name) # 调用函数的函数名 (若无调用则为<module>) print(sys._getframe(0).f_lineno) # 当前函数的行号 print(sys._getframe(1).f_lineno) # 调用函数的行号 try: a = 1 b = 2 c = a / 0 except ZeroDivisionError as err: log.exception(err) # 使用exception记录异常,包含堆栈信息和上下文
运行这段代码后,输出的错误信息将包含变量a、b和c的值:
[2023-10-27 10:30:00] ERROR: division by zero Traceback (most recent call last): File "<string>", line 13, in <module> File "<string>", line 8, in get_trace_info ZeroDivisionError: division by zero During handling of the above exception, the following occurred: ... # 更多堆栈信息 ... in get_trace_info() at <string>:8 a = 1 b = 2 c = a / 0
如上所示,loguru 通过sys._getframe()函数成功打印了变量的值,即使这些变量是在异常发生时才被赋值的。 注意,我们使用了log.exception()而不是log.error(),因为exception会自动包含完整的异常信息和堆栈跟踪。
以上就是如何用loguru打印变量值及错误堆栈信息?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号