如何捕获作为参数传递给另一个函数的函数的异常
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
内将是一个 list
而 kwargs
(关键字参数)将是一个 dict
我有一个调用 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
内将是一个 list
而 kwargs
(关键字参数)将是一个 dict