Pythonで例外伝播チェーンを適切に管理する方法は何ですか?
Pythonの中では、例外をキャッチするためにtry-exceptステートメントを使用し、raiseステートメントを使用して例外を手動で発生させることができます。コードを書く際に、特定の状況で例外をキャッチして処理するか、それ以外の場合は例外を呼び出し元に伝播させるかを選択することができます。
以下は、例として、例外の伝搬チェーンを適切に管理する方法を示すコードです。
def func1():
try:
raise ValueError("Error in func1")
except ValueError as e:
print("Caught exception in func1")
raise # re-raise the exception
def func2():
try:
func1()
except ValueError as e:
print("Caught exception in func2")
raise # re-raise the exception
try:
func2()
except ValueError as e:
print("Caught exception in main")
この例では、func1()関数でValueErrorの例外が発生し、それがfunc2()関数でキャッチされ、再度例外が投げられます。最後に、メイン関数で例外が再度キャッチされて処理されます。このようにして、例外は呼び出し元に正しく伝播され、途中で失われたり変更されたりすることはありません。