-
-
Notifications
You must be signed in to change notification settings - Fork 575
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug: Pyright strict 模式检查不通过 #2855
Comments
nb 目前仅支持 standard 模式类型检查,该模式也是 pyright 默认模式,在 strict 模式下,你使用的大部分库(包括标准库)都无法通过检查。 如果有空的话,nb 也可以针对 strict 模式做一些补充,但不能保证做到 0 error。 |
用严格模式对开发效率是很有帮助的,建议试一试,标准库及大部分流行第三方库的类型问题都可以通过安装额外的stubs文件解决 |
如果认为有必要的话,我很乐意贡献一些 PR,但我需要先确认项目的 owner 认为这是有价值的。 另外过程中可能会需要一些讨论以了解 nb 库的设计思路,因为加类型的过程中会需要对这些细节了解地很透彻。 比如 Message 为什么设计为泛型(但引用处又存在未指定泛型参数的情形) |
这个问题有点舍本逐末了,类型是提升开发效率的,而不应作为主要内容。作为开发者,过分纠结类型问题并不能解决实际问题 |
大部分库均采用 mypy 或 pyright standard/basic 模式进行检查,目前我认为 strict 模式无必要,因为他会 forbid 任何 unknown,要做到这一点首先需要要求所有的 depends (包括标准库和第三方库)均以 strict 模式通过检查,我认为这个目前是不可能的,需要为所有上游依赖进行修改。
由于 Message 是一个抽象类,具体实现由适配器决定,所以这些类型均为泛型。 |
将类型检查简单的设置为 《Robust Python》一书对此有所见解:
|
泛型没问题,我理解这里 Message 是 MessageFragment 的一个多态列表也没问题,但是,至少我们可以用 |
@luochen1990 并不可以,可以看到 Message 泛型的 TypeVar 具有 bounded type 限制,为了确保元素类型必须为 MessageSegment 的子类型。而 MessageSegment 也为泛型,python 并不支持 HKT。 |
我是指,从 kind 层面 , |
Dependent 那边遗漏的类型在 #2856 里补全。 Message 泛型我不认为用 Any 是一个好的做法,这同样是在隐蔽式产生错误。当然这个问题在适配器的子类实现上并不存在,你依然可以正确使用子类型。如果你对于 Message 基类的 type hint 有更好的做法,欢迎 PR 来解决这个问题。 |
如果有遗漏的类型欢迎提交 Issue 或者 PR |
操作系统
Linux
Python 版本
3.12
NoneBot 版本
2.3.2
适配器
无关
协议端
无关
描述问题
Pylance严格模式下类型错误:
Type of "on_message" is partially unknown
Type of "get_message" is partially unknown
Type of "send" is partially unknown
复现步骤
期望的结果
类型检查正确,没有类型错误
截图或日志
The text was updated successfully, but these errors were encountered: