Python 3.x Pycharm在执行自动完成/类型检查时使用不完整的存根

Python 3.x Pycharm在执行自动完成/类型检查时使用不完整的存根,python-3.x,pycharm,Python 3.x,Pycharm,我试图注释一个变量,该变量包含对asyncio.start\u server的调用的返回。问题是,Pycharm无法识别AbstractServer类包含的所有方法 基本示例: import asyncio as a async def server(): svr: a.AbstractServer = await a.start_server(lambda r, w: None, "127.0.0.1", 5555) await svr.serve_forever() 这段

我试图注释一个变量,该变量包含对
asyncio.start\u server
的调用的返回。问题是,Pycharm无法识别
AbstractServer
类包含的所有方法

基本示例:

import asyncio as a

async def server():
    svr: a.AbstractServer = await a.start_server(lambda r, w: None, "127.0.0.1", 5555)
    await svr.serve_forever()
这段代码有效(当我使用真正的回调并连接客户机时)。Pycharm对此表示不满,并在
wait svr.serve_forever()行显示“弱错误”:

类“AbstractServer”的未解析属性引用“永远服务”

这很奇怪,因为
events.py中的
AbstractServer
肯定包含该方法:

class AbstractServer:
    """Abstract server returned by create_server()."""

    . . .

    async def serve_forever(self):
        """Start accepting connections until the coroutine is cancelled.

        The server is closed when the coroutine is cancelled.
        """
        raise NotImplementedError

    . . .
但是在Pycharm中,当我单击
类AbstractServer
旁边边框中的小
*
查看存根时,它会将我重定向到存根(在
事件.pyi
中):

出于某种原因,存根只列出了
AbstractServer
的两个方法和一个属性。因此,即使类确实有像
永远服务
这样的方法,Pycharm似乎只引用不完整的存根


有人知道为什么Pycharm这个类的存根不完整,以及如何修复它吗?我不希望为了绕过类型检查器而添加忽略注释。我尝试了“使缓存无效/重新启动”,但这似乎没有起到任何作用。

我不确定这会产生什么影响,但在此期间,我的“解决方案”如下:

  • 我导航到
    C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\helpers\typeshed\stdlib\3
    ,这是存根所在的位置

  • 我将
    /3/asyncio
    重命名为
    asyncio\u BACKUP
    (实际上是从Pycharm的角度删除它,而不是实际删除它)。我还可以在
    3/asyncio/
    中重命名特定的
    events.pyi
    文件,剩下的就不用管了

  • 我重新启动了IntelliJ(实际上我运行了“使缓存失效/重新启动”,尽管我不确定这是否必要)

现在一切都好了。Pycharm似乎已经退回到使用
events.py
而不是使用不完整的
events.pyi
存根

我希望有人张贴一个适当的修复。不过,在这段时间内,这似乎还不错。也许我会尝试重新安装Pycharm;虽然这似乎是一个沉重的负担



警告 这个解决方案最终很糟糕。如果没有相关的
.pyi
条目,Pycharm似乎无法加载任何内容的ctrl+q文档。现在,当我尝试加载文档时,它会加载
asyncio
本身的文档。我将把文件夹重新命名为原来的文件夹,并有选择地重新命名
events.pyi
,以限制由此引起的问题

class AbstractServer:
    sockets: Optional[List[socket]]
    def close(self) -> None: ...
    @coroutine
    def wait_closed(self) -> Generator[Any, None, None]: ...