如何在堆栈跟踪中打印变量值?无控制台访问权限场景
解决方法
方法一:针对特定代码块添加异常捕获与日志记录
在调用os.chdir的地方包裹try-except块,捕获异常时将变量值写入日志文件,同时保留原堆栈跟踪:
import os import logging # 配置日志输出到文件 logging.basicConfig(filename='app_error.log', level=logging.ERROR, format='%(asctime)s - %(message)s') try: os.chdir(directoryName) except Exception as e: # 把变量值写入日志 logging.error(f"执行os.chdir失败,directoryName的值为: '{directoryName}'") # 重新抛出异常,保留原堆栈信息 raise
方法二:全局异常钩子记录变量
通过自定义全局异常处理函数,捕获所有未处理的异常,自动查找并记录相关变量值:
import os import sys import logging import inspect logging.basicConfig(filename='app_error.log', level=logging.ERROR, format='%(asctime)s - %(message)s') def custom_exception_handler(exc_type, exc_value, exc_traceback): # 遍历栈帧,查找directoryName变量 frame = inspect.currentframe().f_back while frame: if 'directoryName' in frame.f_locals: dir_val = frame.f_locals['directoryName'] logging.error(f"捕获异常,directoryName的值为: '{dir_val}'") break frame = frame.f_back # 调用默认异常处理,保留原始堆栈跟踪 sys.__excepthook__(exc_type, exc_value, exc_traceback) # 替换默认异常钩子 sys.excepthook = custom_exception_handler # 原执行代码 os.chdir(directoryName)
两种方法都会把directoryName的具体值写入日志文件,你可以通过查看日志文件获取变量内容,同时原有的堆栈跟踪信息也会被保留,方便定位问题。
内容的提问来源于stack exchange,提问作者Colas
相关产品推荐
相关产品推荐

