从追溯获取上一个函数的调用参数?

发布于 2021-01-29 16:16:45

我可以获取在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()

(感谢Jim Robert担任装饰)

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    使用装饰器实现您要实现的问题是,异常处理程序获得的帧是do_your_job()s,而不是os.listdir()s,os.makedirs()s或os.chown()s。因此,您要打印的信息就是的参数do_your_job()。为了获得我认为您想要的行为,您必须修饰所有要调用的库函数。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看