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

How to catch exceptions from function that has been passed as an argument to another function

我有一个调用 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 中的 运行ning,所以我不知道这是否是导致此问题的原因。

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

要单独传递所有内容,您会做

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