我正在尝试注释一个变量,该变量包含对asyncio.start_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抱怨但在await svr.serve_forever()
行上显示“弱错误”:
类'AbstractServer'的未解析属性引用'serve_forever'
这很奇怪,因为AbstractServer
中的events.py
肯定包含该方法:
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中,当我单击*
旁边的边框中的小class AbstractServer
以查看存根时,这就是将我重定向到的内容(在events.pyi
中):>
class AbstractServer:
sockets: Optional[List[socket]]
def close(self) -> None: ...
@coroutine
def wait_closed(self) -> Generator[Any, None, None]: ...
由于某种原因,存根仅列出了AbstractServer
的两个方法和一个属性。因此,即使该类确实具有类似serve_forever
的方法,Pycharm似乎也只引用了不完整的存根。
有人知道为什么Pycharm的此类存根不完整以及如何解决吗?我宁愿不必为了避免类型检查器而添加ignore-comments。我尝试了“使缓存无效/重新启动”,但似乎没有任何作用。
答案 0 :(得分:1)
我不确定这会带来什么影响,但是与此同时,这是我的“解决方案”:
我导航到存根所在的C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\helpers\typeshed\stdlib\3
我将/3/asyncio
重命名为asyncio_BACKUP
(从Pycharm的角度看,实际上是删除了它,而没有实际删除它)。我还可以将events.pyi
内的特定3/asyncio/
文件重命名,然后其余的都保留下来。
我重新启动了IntelliJ(实际上我运行了“ Invalidate Caches / Restart”,尽管我不确定是否有必要)
现在可以自动完成了。 Pycharm似乎不愿使用events.py
而不是使用不完整的events.pyi
存根。
我希望有人发布适当的修复程序。同时,这似乎很好。也许我会尝试重新安装Pycharm。尽管这似乎是一个沉重的解决方案。
此解决方案最终效果不佳。如果没有相关的.pyi
条目,Pycharm似乎无法加载 ctrl + q 文档。现在,当我尝试加载文档时,它会加载asyncio
本身的文档。我打算将文件夹重命名为原来的名称,然后有选择地重命名events.pyi
,以限制由此引起的问题。