except AttributeError as err: raise Exception("起止时间未找到上报!") from err 这种异常怎么变成非阻塞还能不影响自定义的返回
时间: 2023-11-28 08:50:17 浏览: 76
在 Python 中,使用异步编程时,可以使用 `asyncio` 库提供的 `asyncio.create_task()` 方法将耗时的操作放在一个协程中,并将该协程提交给事件循环(event loop)来执行。这样可以避免阻塞主线程,从而实现非阻塞的效果。
对于上述代码中的异常,可以使用 `try-except` 块将其包装在一个协程中,然后使用 `asyncio.create_task()` 方法将该协程提交给事件循环来执行。这样异常会被捕获,但不会阻塞主线程。在捕获异常后,可以根据需要返回自定义的结果,而不影响程序的执行。
以下是示例代码:
```python
import asyncio
async def my_coroutine():
try:
# 耗时的操作
# ...
except AttributeError as err:
# 自定义异常处理
result = "起止时间未找到上报!"
else:
# 操作成功,返回结果
result = "操作成功"
return result
async def main():
# 创建任务并等待执行结果
task = asyncio.create_task(my_coroutine())
result = await task
# 处理结果
print(result)
# 运行主程序
asyncio.run(main())
```
在上述代码中,`my_coroutine()` 是一个协程,其中包含了耗时的操作和异常处理逻辑。`main()` 是另一个协程,用于创建任务并等待执行结果。使用 `asyncio.create_task()` 方法可以将 `my_coroutine()` 协程提交给事件循环来执行。在 `main()` 协程中,使用 `await` 关键字等待任务执行完成,并获取执行结果。最后,根据需要处理结果。
阅读全文