使用APScheduler时如何处理异常?

How to handle exceptions when using APScheduler?

我刚刚尝试在 Python3.7 中使用 apsheduler(3.7.0)。我使用 'try/except' 子句来处理作业中的异常,但没有捕获到任何异常。代码是从官方例子里抄来的(我觉得可能有点过时了)

from apscheduler.schedulers.blocking import BlockingScheduler

def test():
    print('test')
    raise SystemExit

if __name__ == "__main__":
    scheduler = BlockingScheduler()
    scheduler.add_executor('threadpool')
    scheduler.add_job(test, 'interval', seconds=5)
    try:
        scheduler.start()
    except (KeyboardInterrupt, SystemExit):
        print('caught')

调度程序保持 运行 并且 'caught' 从未被打印,直到我按下 ctrl+C。我也试过抛出其他类型的异常(甚至KeyboardInterrupt),还是一样。

那我做错了吗?我应该如何处理作业中的异常?

如果作业通过事件侦听器引发异常,您会收到通知:

from apscheduler.events import EVENT_JOB_ERROR

def listener(event):
    print(f'Job {event.job_id} raised {event.exception.__class__.__name__}')

scheduler.add_listener(listener, EVENT_JOB_ERROR)