如何捕获已作为参数传递给另一个函数的函数的异常

时间:2018-01-12 04:08:38

标签: python python-3.x exception-handling

我有一个调用API的库。

由于我正在调用的API的一些限制,我希望能够使用不同的凭据重试该呼叫。

我将函数内部传递给库函数。

但是,当我尝试从调用中捕获任何异常时,没有异常被捕获,我最终得到了代码退出和堆栈跟踪。

代码如下所示

import the_library

def making_the_call(api_call):
    try:
        api_call()
    except TheKeyExceptionIamLookingFor:
        # change creds and redo the call
    except OtherExceptionsICareAboutAndExpect:
        # Do other stuff to handle

making_the_call(the_library.some_api_call(the_args))

这是在aws lambda中运行的,所以我不知道这是否有助于解决这个问题。

我在python控制台中运行了类似的代码,它从带有参数的传递函数中捕获异常,但是此代码只是退出并给我一个堆栈跟踪,甚至显示我正在寻找并计划捕获的确切异常。

1 个答案:

答案 0 :(得分:3)

单独传递所有内容你会做

def make_call(api_call, *args, **kwargs):
    try:
        return api_call(*args, **kwargs)
    except SomeException:
        # change args and kwargs
        return make_call(api_call, *args, **kwargs)

make_call(the_library.some_api_call, 'apple', 1, 2, 3)

请注意()之后缺少some_api_call。内部make_call args内部为listkwargs(关键字参数)为dict