Pythonでは、デコレータを使用して関数やメソッドの前後に特定の処理を追加することができます。この記事では、特定の例外が発生した場合に関数を再試行するデコレータの作成方法を説明します。
デコレータの基本
デコレータは、他の関数の機能を変更したり拡張したりするための関数です。デコレータ関数を定義し、修正したい関数に@decorator_name
という構文を追加します。
def my_decorator(func):
def wrapper():
print("start")
func()
print("end")
return wrapper
@my_decorator
def say_hello():
print("hello")
say_hello()
上記のコードを実行すると、以下の結果が得られます。
start
hello
end
@my_decorator
はPythonの糖衣構文で、say_hello
関数をmy_decorator
関数の引数として渡すことができます。つまり、元の関数をデコレータ関数の中に入れて実行することで、元の関数がデコレータの戻り関数に置き換わるのです。
リトライデコレータの作成
次に、特定の例外が発生した場合に関数を再試行するデコレータを作成します。以下にその例を示します。
def retry_decorator(base_function):
def new_function(*args, **kwargs):
for attempt in range(3):
try:
return base_function(*args, **kwargs)
except Exception as e:
if attempt == 2: # 最後の試行であれば例外を再度発生させる
raise e
time.sleep(1) # 1秒待機してから再試行
return new_function
このデコレータは、base_function
が例外をスローした場合に、最大3回までbase_function
を再試行します。それぞれの試行の間に1秒の遅延を挿入します。3回の試行がすべて失敗した場合、デコレータは最後に捕捉した例外を再度スローします。
以上がPythonでリトライ可能なデコレータを作成する方法です。このテクニックを使えば、ネットワークリクエストやデータベースクエリなど、一時的なエラーによって失敗する可能性のある操作をより堅牢にすることができます。