我已将异常处理程序设置为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()
,我的异常处理程序可以捕获消息并写入日志文件。a()
但是当在完美任务(和)内部引发错误时b()
,日志文件不会输出任何内容,这意味着异常处理程序不会捕获错误消息。我不确定prefect task
异常处理程序是否有另一个钩子。你能给我一些关于如何进一步调试这个问题的建议吗?