写一个多个异常作为参数传入的异常重试函数,且只有抛出异常为传入异常时再进行重试,并给出示例
时间: 2024-03-11 17:48:03 浏览: 50
好的,我会为您编写一个多个异常作为参数传入的异常重试函数,并提供相应的示例代码。
以下是函数的代码实现:
```python
import time
def retry_on_exception(func, exceptions, retries=3, delay=1):
for i in range(retries):
try:
return func()
except exceptions as e:
print(f"Exception caught: {e}. Retrying in {delay} seconds...")
time.sleep(delay)
raise e
```
该函数接收三个参数:
- `func`: 要执行的函数。
- `exceptions`: 作为重试条件的异常类型,可以是单个异常类型或元组。
- `retries`: 最大重试次数,默认为 3。
- `delay`: 重试间隔时间,默认为 1 秒。
当 `func` 执行时抛出指定的异常时,函数会进行重试,重试次数达到 `retries` 次后如果仍然抛出异常则会将异常抛出给上层代码处理。
以下是一个示例函数,它会随机抛出三种不同类型的异常:
```python
import random
def my_func():
if random.choice([True, False]):
raise ValueError("Oops! Something went wrong.")
elif random.choice([True, False]):
raise TypeError("Oops! Something went wrong.")
else:
raise RuntimeError("Oops! Something went wrong.")
```
我们可以使用上面定义的 `retry_on_exception` 函数对 `my_func` 进行重试:
```python
try:
retry_on_exception(my_func, (ValueError, TypeError, RuntimeError))
except Exception as e:
print(f"Failed after {retries} retries: {e}")
```
在上面的示例中,`retry_on_exception` 函数会在 `my_func` 抛出 `ValueError`、`TypeError` 或 `RuntimeError` 时进行重试,最多重试 3 次,每次重试间隔 1 秒。如果重试 3 次后仍然抛出异常,则该异常会被抛出给上层代码处理。
阅读全文