Asyncio开始隐藏错误

时间:2019-04-23 10:30:14

标签: python-3.x python-asyncio

我正在将asyncio与websockets和aiohttp一起用于Twitch API机器人。一切都很好,但是在某个时候asyncio开始隐藏错误并使代码变砖。

经过一段时间的处理,我意识到只有在asyncio.gather()上等待的函数(和嵌套函数)上才会发生。

如果您在图像中看到,我尝试打印一个未解决的参考,这时线程已死并且没有引发错误。

https://cdn.discordapp.com/attachments/532653651689472024/570191503587147776/Screenshot_2.png

此外,根据类型错误,异步代码(asyncio/events.py)的这一部分是否很奇怪,异步在这部分上循环了很多次。我不知道这是否重要。

https://cdn.discordapp.com/attachments/532653651689472024/570191514634944522/Screenshot_4.png

此外,我尝试使用pycharm和asyncio卸载pip。代码仍在访问asyncio,我不知道在哪里。我没有设置虚拟环境。有什么方法可以手动卸载并尝试干净地重新安装asyncio

顺便说一句,我的应用程序仍然可以正常工作,只是当我错过某些东西时就没有任何线索,这使得进度非常困难

1 个答案:

答案 0 :(得分:0)

  

如果您在图像中看到,我会尝试打印一个未解决的参考   指出线程已死,并且不会引发任何错误。

asyncio.gather同时运行多个任务,并且by default传播所有提出的任务的第一个异常。即使此异常未完成您的程序,它也至少改变了解释器的位置。而且,尽管其他收集的任务继续在后台运行,但是从您的解释器当前所在的新位置不能提出其例外。

在任务中发生异常,但未在are printed处引发异常,因为在关闭事件循环时(通常在程序的最后)警告“从未检索到任务异常”。

由于您未提供minimal reproducible example,因此很难说这是否正是您的情况。随时提供一个以获取更准确的答案。

  

此外,我尝试使用pycharm和pip卸载asyncio。   代码仍然访问异步我不知道在哪里。我没有   虚拟环境设置。有什么方法可以手动卸载并   尝试干净地重新安装asyncio?

asyncio是Python standard library的一部分。如果没有(重新/取消)安装Python解释器本身,则无法(或至少不应)(重新/取消)安装此模块。