JTa*_*JTa 8 python python-requests python-tenacity
假设我有以下功能:
@retry(stop=stop_after_attempt(3))
def foo():
try:
response = requests.post(...)
response.raise_for_status()
return response
except Exception as e:
raise e
Run Code Online (Sandbox Code Playgroud)
该函数将重试 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
Run Code Online (Sandbox Code Playgroud)
小智 12
装饰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
Run Code Online (Sandbox Code Playgroud)
Moo*_*ter -6
使用纯Python:
def foo(tries=0,maxTries=3):
try:
response = requests.post(...)
response.raise_for_status()
return response
except Exception as e:
if tries>=maxTries:
print("Maxtries reached.")
return
else:
foo(tries+1,maxTries)
Run Code Online (Sandbox Code Playgroud)
我不确定递归函数在这里是否有帮助。
| 归档时间: |
|
| 查看次数: |
5774 次 |
| 最近记录: |