import functools
import aioschedule as schedule
import asyncio
def catch_exceptions(cancel_on_failure=False):
def catch_exceptions_decorator(job_func):
@functools.wraps(job_func)
def wrapper(*args, **kwargs):
try:
return job_func(*args, **kwargs)
except:
import traceback
if cancel_on_failure:
return schedule.CancelJob
return wrapper
return catch_exceptions_decorator
@catch_exceptions(cancel_on_failure=True)
async def bad_task():
print(1 / 0)
def main():
schedule.every().minute.do(bad_task)
loop = asyncio.get_event_loop()
while True:
loop.run_until_complete(schedule.run_pending())
if __name__ == '__main__':
main()
我希望捕获作业中将发生的异常并停止作业
这里我使用的是aioscheduleaioschedule。
此解决方案从exception handling中选取。
运行上述代码后ZeroDivisionError: division by zero
错误继续发生
当我使用scheduleschedule而不是aioschedule时,上面的代码工作得非常好。
但我的方法是异步方法,我使用wait。
任何帮助都将不胜感激。
多谢各位
我在
bad_task()
的末尾添加了一个await
语句,它将等待函数调用完成。因此,如果函数以错误终止,结果将在while循环中捕获,程序将终止更新:这里有一个更好的方法,可以避免在函数末尾使用
await
语句相关问题 更多 >
编程相关推荐