从traceback获取最后一个函数的调用参数?

cul*_*rón 2 python exception-handling traceback

我可以获取traceback中调用的最后一个函数的参数吗?怎么样?

我想制作标准错误的捕获器以生成可读代码,同时向用户提供详细信息.

在下面的例子中,我希望GET_PARAMS返回一个提供给os.chown的参数元组.检查inspectAlex Martelli建议的模块,我找不到.

def catch_errors(fn):
    def decorator(*args, **kwargs):
        try:
            return fn(*args, **kwargs)
        except (IOError, OSError):
            msg = sys.exc_info()[2].tb_frame.f_locals['error_message']
            quit(msg.format(SEQUENCE_OF_PARAMETERS_OF_THE_LAST_FUNCTION_CALLED)\
            + '\nError #{0[0]}: {0[1]}'.format(sys.exc_info()[1].args), 1)
    return decorator

@catch_errors
def do_your_job():
    error_message = 'Can\'t change folder ownership \'{0}\' (uid:{1}, gid:{2})'
    os.chown('/root', 1000, 1000) # note that params aren't named vars.

if __name == '__main__' and os.getenv('USERNAME') != 'root':
    do_your_job()
Run Code Online (Sandbox Code Playgroud)

(感谢Jim Robert为装饰师)

Ale*_*lli 5

对于此类检查任务,请始终首先考虑inspect标准库中的模块.这里,inspect.getargvalues为您提供给定框架的参数值,inspect.getinnerframes为您提供回溯对象的感兴趣框架.