pyright 如何忽略某个导入模块引发的类型问题?

310 天前
 NoOneNoBody
例如 pandas
pandas.read_csv 返回 dataframe|textfilereader 两种类型,但实际上绝大部分都是前者,后者遇到时可以作为异常处理就好了
而这个返回类型导致后续每行,使用这个返回变量的语句都会报类型错误,一大堆飘红

gb = dataframe.groupby(colnames, as_index=True)
sized = gb.size() # type: pd.Series
后一句飘红
依据文档,as_index=True 时,gb.size()返回 series ,但 pyright 不能识别,仍然检查报告 dataframe 不符合类型
我可以理解 pyright 没那么智能,所以需要排除各种状况

没搜到(没读懂?)如何忽略某个 import module 引发的类型检查?
928 次点击
所在节点    Python
10 条回复
pursuer
310 天前
只说类型转换,可以用 typing.cast
Belmode
310 天前
这不就是最基本的类型检查,和类型转换么...
jfcherng
310 天前
> 依据文档,as_index=True 时,gb.size()返回 series ,但 pyright 不能识别,仍然检查报告 dataframe 不符合类型

聽起來像是沒有安裝 https://pypi.org/project/pandas-stubs/ , 要不安裝到環境後重啟 pyright 試試?
NoOneNoBody
310 天前
@jfcherng #3
刚才装了,sublime+lsp_pyright 依旧
vscode+pylance 之前没装 pandas-stubs 也没这些问题,只是我现在转到 sublime 搞不定了,都是基于 pyright ,搞不清两者区别

暂时是逐行加# type: ignore 跳过,不过想找治本方法
jfcherng
310 天前
@NoOneNoBody #4 pylance 是自帶 stubs 的
jfcherng
310 天前
我這邊裝了 pandas-stubs 以後是正常的
NoOneNoBody
310 天前
@jfcherng #6
你试试把 # type: Series 加在 size()后面,加这注释才是类型指定
jfcherng
310 天前
@NoOneNoBody #7 ??? 為什麼要做這種事情,pyright 的類型甚至比你指定的更精確
NoOneNoBody
310 天前
@jfcherng #8
其实初心不是为了校验的,只是为了标记一下,review 时能想起是什么类型,只是顺带做校验而已
jfcherng
310 天前
校驗有問題本來就會標紅色,全 project 的校驗直接 mypy 走起

review 想起類型其實也不用那麼麻煩,但是 ST 這邊現在比較尷尬,因為純正的 pyright 並沒有 inlay hint 功能,隔壁的 coc-pyright 自己實現了 inlay hint 以及其他功能。

以前我是直接搞 LSP-pylance ,但是後來微軟發信警告我 license 不允許我這麼做,於是 github 上的 LSP-pylance 我下架了。Pylance 有 inlay hint ,就是微軟的 license 只准在自己的編輯器用。Pylance in ST 的效果,有能力的自己私底下可以搞個...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954628

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX