Python asyncio:在异常时停止协同路由

Python asyncio:在异常时停止协同路由,python,asynchronous,async-await,python-asyncio,Python,Asynchronous,Async Await,Python Asyncio,我正在编写一个函数,它必须在捕获异常时自动重新启动,但我不知道怎么做。 我有这段代码,但不起作用 导入异步IO 异步def main(): 尽管如此: 尝试: #大量的代码 例外情况除外,如e: 打印(f“异常:{e}”) #这里我希望这个脚本再次运行main() 回来 asyncio.run(main()) 您的main函数是一个联合例程,联合例程保持状态。重新开始同一个可能不是个好主意。您需要两个函数,一个是共同例程main,另一个是处理创建新共同例程并再次运行它的常规函数main asyn

我正在编写一个函数,它必须在捕获异常时自动重新启动,但我不知道怎么做。 我有这段代码,但不起作用

导入异步IO
异步def main():
尽管如此:
尝试:
#大量的代码
例外情况除外,如e:
打印(f“异常:{e}”)
#这里我希望这个脚本再次运行main()
回来
asyncio.run(main())

您的
main
函数是一个联合例程,联合例程保持状态。重新开始同一个可能不是个好主意。您需要两个函数,一个是共同例程
main
,另一个是处理创建新共同例程并再次运行它的常规函数main

async def amain():
#大量代码
def main():
尽管如此:
尝试:
asyncio.run(amain())
除键盘中断外:
打破
例外情况除外,如e:
日志(e)

差不多吧

你的逻辑是错误的。首先运行
main()
完成,然后将
running
设置为true。随后的循环迭代将发现
running
是真的,并且什么也不做。您需要更详细地描述您希望实现的目标。发布实际代码而不是伪代码根据您的代码判断,您所要做的就是删除
return
语句。但在现实生活中,这样的代码会被破坏。一些中断机制几乎肯定是必要的。@RomanPerekhrest我编辑了这篇文章,以获得实际的代码如果你删除
返回值
,它将按预期工作。。。