使用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)
我刚刚尝试在 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)