1

例外ハンドラを次のように設定しました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に例外ハンドラ用の別のフックがあるかどうかはわかりません。この問題をさらにデバッグする方法について、いくつか提案をお願いできますか?

4

1 に答える 1