実現したいこと
Python 例外処理で errorを出力させても、プログラムがそこで強制終了せず、先に進んでしまうことがある。errorの出た場所で強制終了させたい。
前提
定義関数1のReturn を受けて 定義関数2を実行するプログラムで、定義関数1に例外処理をかけて、エラーが発生しているのに、そのエラーのreturn値を定義関数2が受けて実行し、そこまで進んで初めてプログラムが終了する。
実用上、上記の応答でも問題ないようにも思えるが、例外処理でErrorのあった場所でプログラムを終了させたい。
発生している問題・エラーメッセージ
例外処理してなければ、ソースコードの最初の定義関数 test_1で、 ZeroDivisionError: division by zero のエラーでプログラムが終了するのに。例外処理すると以下のように、定義関数test_2まで進んでからでないとプログラム終了しない。 runfile('C:/pyfile/tryexcept_logging2.py', wdir='C:/pyfile') 実行開始 - 2023-05-23 11:00:29,372 - ERROR_3 - ERROR - division by zero - 実行終了 Traceback (most recent call last): File ~\Anaconda3\envs\oono_latest\lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec exec(code, globals, locals) File c:\pyfile\tryexcept_logging2.py:33 → 何でtest_2まで進んでるの??? test_2(m=f) NameError: name 'f' is not defined
該当のソースコード
Python
1import logging 2 3def test_1(k): 4 f=100/k 5 return f 6 7def test_2(m): 8 z=m 9 print(z) 10 11def logger_error(e): 12 logger=logging.getLogger("ERROR_3") 13 logger.setLevel(logging.ERROR) 14 sh=logging.StreamHandler() 15 sh.setLevel(logging.ERROR) 16 format=logging.Formatter("%(start)s - %(asctime)s - %(name)s - %(levelname)s - %(message)s - %(end)s") 17 sh.setFormatter(format) 18 for h in logger.handlers[:]: 19 logger.removeHandler(h) 20 h.close() 21 logger.addHandler(sh) 22 d={"start":"実行開始","end":"実行終了"} 23 logger.error(e,extra=d) 24 #logger.exception(e,extra=d) #trace backも出力する 25 26k0=0 27try: 28 f=test_1(k=k0) 29except ZeroDivisionError as e: #分母が0 30 logger_error(e=e) 31 32test_2(m=f)
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。