【Python3.x】RecursionError::__cause__定数の使い方
__cause__定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
__cause__定数は、RecursionErrorという例外オブジェクトが、他のどの例外によって引き起こされたかを示す情報(原因となった例外)を保持する定数です。
RecursionErrorは、関数が自分自身を繰り返し呼び出しすぎた(再帰呼び出しの深さがPythonで許容される上限を超えた)場合に発生するエラーです。通常、プログラムが無限ループのような状態に陥り、Pythonインタープリタがそれを検出したときに自動的に発生させます。
この__cause__は、Pythonの例外処理において、ある例外が別の例外によって直接引き起こされた場合に、その引き起こした側の例外(根本的な原因となった例外)を記録するための「例外チェイン」という仕組みの一部です。RecursionErrorは、多くの場合、Pythonインタープリタが直接発生させるため、通常は明示的な原因となる例外を持たず、デフォルト値としてNone(何もない)が設定されています。
しかし、プログラマが意図的にRecursionErrorを発生させつつ、その原因となった別の例外を明示的に指定した場合(例えば、raise RecursionError from another_exceptionのように記述した場合)、この__cause__には、指定された「another_exception」が格納されます。
このように__cause__に原因となる例外が設定されている場合、エラーの発生経緯をより詳細に追跡し、デバッグの際に根本的な問題を発見するための貴重な手がかりとなります。
構文(syntax)
1error_instance = RecursionError("maximum recursion depth exceeded") 2print(error_instance.__cause__)
引数(parameters)
引数なし
引数はありません
戻り値(return)
Optional[BaseException]
この属性は、例外が発生した原因となった他の例外オブジェクト、または None を返します。