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]: ...