【发布时间】:2018-01-12 04:08:38
【问题描述】:
我有一个调用 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 控制台中运行了类似的代码,它从带有参数的传递函数中很好地捕获了异常,但是这段代码只是退出并给了我一个堆栈跟踪,甚至显示了我正在寻找并计划捕获的确切异常。
【问题讨论】:
-
看起来您正在调用
some_api_call,然后将结果作为参数传递给making_the_call。 -
@PatrickHaugh 这个想法已经闪过我的脑海,但是我的 google foo 在如何分别传递参数方面让我失望,因此我这样做了,你能给我一个例子或资源去阅读吗如何正确地做到这一点?
-
这实际上是一个很好的问题,答案很简单。当我开始阅读它时,我并没有预料到。干得好。
-
你试过
except the_library.ExceptionYouAreLookingFor:吗?我之前遇到过类似的问题,我试图捕捉ConnectionError,但它不会返回。原来我抓住了Requests.ConnectionError,因为它是导入模块中自己的特殊异常对象。 -
@Idlehands 我实际上是从库
from the_library.api_errors import TheExceptionIamLookingFor中导入特定错误,所以这次不是这种情况,但对于将来看到这个问题的人来说,这是一件好事.
标签: python python-3.x exception-handling