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

2023-07-06 16:58:43 +08:00
 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 引发的类型检查?
1077 次点击
所在节点    Python
10 条回复
pursuer
2023-07-06 17:20:16 +08:00
只说类型转换,可以用 typing.cast
Belmode
2023-07-06 18:17:49 +08:00
这不就是最基本的类型检查,和类型转换么...
jfcherng
2023-07-06 18:46:15 +08:00
> 依据文档,as_index=True 时,gb.size()返回 series ,但 pyright 不能识别,仍然检查报告 dataframe 不符合类型

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

暂时是逐行加# type: ignore 跳过,不过想找治本方法
jfcherng
2023-07-06 19:56:13 +08:00
@NoOneNoBody #4 pylance 是自帶 stubs 的
jfcherng
2023-07-06 20:16:44 +08:00
我這邊裝了 pandas-stubs 以後是正常的
NoOneNoBody
2023-07-06 20:40:20 +08:00
@jfcherng #6
你试试把 # type: Series 加在 size()后面,加这注释才是类型指定
jfcherng
2023-07-06 20:43:53 +08:00
@NoOneNoBody #7 ??? 為什麼要做這種事情,pyright 的類型甚至比你指定的更精確
NoOneNoBody
2023-07-06 20:50:50 +08:00
@jfcherng #8
其实初心不是为了校验的,只是为了标记一下,review 时能想起是什么类型,只是顺带做校验而已
jfcherng
2023-07-06 21:01:05 +08:00
校驗有問題本來就會標紅色,全 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