Pythonでは、例外が発生した場合にそれをキャッチして処理を続行するためには、通常try/except
ブロックを使用します。しかし、ループの中でtry/except
ブロックを使わずに例外を発生させてもメインのコード/ループが続行する方法があるかどうか、という質問がありました。
結論から言うと、try/catch
を使わないとPythonでは不可能です。関数内で例外が発生し、それが処理されない場合、その例外は呼び出し元の関数に伝播します。そして、その例外がメインプログラムに到達し、そこでも例外処理がない場合、プログラムは例外トレースバックと共に停止します。
しかし、例外を発生させつつもコードの実行を続けるための一つの方法として、特定の関数を作成する方法があります。以下にその例を示します。
from inspect import currentframe,getframeinfo
def Raise(ex):
cf = currentframe() #Get the line
line=cf.f_back.f_lineno
print('Traceback:\\n'+ex+'\\nin line '+str(line))
wait=input('Press Enter to continue excecution.')
readme = input("Write here something:")
if readme == "":
Raise("That was empty!")
このコードでは、Raise
関数を定義しています。この関数は例外を引数として受け取り、その例外が発生した行番号とともにトレースバックを表示します。そして、ユーザーがEnterキーを押すまで実行を一時停止します。
以上のように、Pythonでは例外を発生させつつもコードの実行を続けるためには、適切な例外処理が必要となります。この記事が、Pythonの例外処理についての理解を深める一助となれば幸いです。