python - Python 坚韧:如果所有重试都失败,我如何重试函数而不引发异常?
问题描述
假设我有以下功能:
@retry(stop=stop_after_attempt(3))
def foo():
try:
response = requests.post(...)
response.raise_for_status()
return response
except Exception as e:
raise e
该函数将重试 3 次,如果所有 3 次重试都失败,则会引发异常。
如何在不引发异常的情况下使用坚韧进行 3 次重试?就像是:
@retry(stop=stop_after_attempt(3))
def foo(ignore_errors=False):
try:
response = requests.post(...)
response.raise_for_status()
return response
except Exception as e:
if ignore_errors and function has been retried three times:
pass
raise e
解决方案
如果所有重试都失败,retry
装饰器有一个retry_error_callback
参数可以覆盖引发 a 的默认行为。RetryError
这个参数应该是一个接受一个参数的函数,称为retry_state
,如果你从这个函数返回一个值,如果所有重试都失败,该值将由函数返回。
一个例子:
from tenacity import retry, stop_after_attempt
return_value_on_error = "something"
@retry(
stop=stop_after_attempt(3),
retry_error_callback=lambda retry_state: return_value_on_error,
)
def broken_function():
raise RuntimeError
assert broken_function() == return_value_on_error
推荐阅读
- jquery - 清除 DataTables 搜索输入后表格没有响应
- c++ - 通过引用传递表达式的结果
- c++ - Qt意外激活dragLeaveEvent,怎么办?
- lua - 拆分表并发送十六进制密钥
- sql - 如何从 db2 中的选定日期获取接下来 24 小时的所有数据?
- c - 如何使用 read() 读取 /dev/mem
- javascript - Javascript,Jquery - 不能在手机上更改 div 的内容,在桌面上工作
- css - 在 Julia 中将自定义 CSS 文件添加到 Dash
- java - Kafka Streams groupby 更新
- r - 最近的字符串匹配及其 rowId