例外ハンドラを次のように設定しましたsys.excepthook
:
def handle_exception(exc_type, exc_value, exc_traceback):
if issubclass(exc_type, KeyboardInterrupt):
logger.error("KeyboardInterrupt\n")
sys.__excepthook__(exc_type, exc_value, exc_traceback)
return
# Preserve the exception info in the log.
print("UNEXPECTED ERROR OCCURRED!")
logger.error(
"Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)
)
# Send the exception info to Slack.
exc_text = (
f"[Error] *{logger_name}* <@U01HX7R5VPW>\n```"
+ "".join(format_exception(exc_type, exc_value, exc_traceback))
+ "```"
)
notify(exc_text, critical=True)
sys.excepthook = handle_exception
私は以下のように完全なフローを実行しています:
with Flow("stocktwits-crawler", schedule=schedule) as f:
print("Running...")
if ...:
a(...)
else:
b(...)
logger.info("All finished.")
メソッドa()
とデコレータb()
が追加されました。@task
私の問題は次のとおりです。a()
andの外でエラーが発生した場合b()
、例外ハンドラーがメッセージをキャッチしてログ ファイルに書き込むことができます。しかし、prefect タスク (a()
およびb()
) 内でエラーが発生した場合、ログ ファイルには何も出力されません。これは、例外ハンドラーがエラー メッセージをキャッチしていないことを意味します。prefect task
に例外ハンドラ用の別のフックがあるかどうかはわかりません。この問題をさらにデバッグする方法について、いくつか提案をお願いできますか?