python中right_Python静态类型检查新工具之pyright 使用指南

python是一门动态类型的语言,民间流传一种说法叫”动态一时爽,重构火葬场”,听起来够吓人的,好在这门语言在不断地改进,包括对 pep484 引入的类型提示(type hint),就是在某种程度上,让python能够像静态语言一样支持类型声明,例如:

def greeting(name: str) -> str:

return 'hello ' + name

这就意味着,如果有人调用 greeting函数的时候,传入的参数不是字符串,你用静态类型检查工具一下就能查出来哪些地方没有传入正确类型的值。而 pyright 就是为此而生。

pyright 核心特性:

typescript 编写,速度快

不依赖python环境

可配置性强

我们可以直接在 vscode 搜索安装插件 pyright

706a0f83e1b7ea991d40749bbf9c0c96.png

命令行工具可以使用 npm 安装

sudo npm i -g pyright

如何使用pyright

假设有个python文件 hello.py,里面代码是:

def greeting2(age:int) -> str:

print("hello")

greeting2("nihao")

greeting2(1)

注意我给greeting2中的参数类型声明是int,返回的返回值是字符串类型,但是在函数中并没有看到return 返回值。直接运行该文件不会有任何错误

python hello.py

hello

hello

在vscode中会直接有错误提示信息:

c9f9a6c21e5f54e429744c67621c87d6.png

如果我们用 pyright 检查代码,输出信息:

pyright hello.py

finding source files

found 1 source files

analyzed 1 file in 1.546sec

/users/xxxx/workspace/my/draft/hello.py

function with declared type of str must return value (1, 28)

argument of type 'str' cannot be assigned to parameter of type 'int' (4, 11)

2 errors, 0 warnings

find source files:    0.001sec

read source files:    0.012sec

tokenize:             0.085sec

parse:                0.17sec

post-parse walker:    0.147sec

semantic analyzer:    0.293sec

type analyzer:        0.766sec

提示有两处问题:

function with declared type of str must return value (1, 28),函数声明返回str类型的值,但是却没有返回

argument of type 'str' cannot be assigned to parameter of type 'int' (4, 11), 字符串值不能复制给int类型参数

剩下的事情就是按照错误提示修正, 正如 pep484 所说的那样,type hint is not role , is tool。 它并不是规则,只是一个工具,帮助我们规避某些错误。即使你传错了参数,程序编译时并不会报错,只有执行到具体的业务代码的时候才会出错。

总结

以上所述是小编给大家介绍的python静态类型检查新工具之pyright 使用指南,希望对大家有所帮助

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python ,循环引入和类检查可能会产生一些问题。循环引入是指在两个或多个模块之间存在相互依赖的情况,而类检查则是指在编译时检查变量的类是否正确。 当存在循环引入时,Python 解释器可能无法正确地解析模块之间的依赖关系,从而导致错误的类检查。例如,如果模块 A 依赖于模块 B,而模块 B 又依赖于模块 A,那么 Python 解释器将无法确定这两个模块的正确加载顺序,从而导致类检查失败。 为了避免循环引入和类检查问题,可以尝试以下方法: 1. 使用合适的导入语句 Python 有多种导入语句,包括 import、from ... import 和 importlib 等。在进行模块间的依赖关系时,建议使用 import 语句,并将依赖的模块放在同一文件夹下。 2. 尽量避免循环依赖 在设计模块时,应尽量避免循环依赖的情况。如果无法避免,可以考虑将共同依赖的代码放在一个独立的模块,并引用该模块。 3. 使用类注解 Python 3.5 引入了类注解的功能,可以在函数、方法、变量等对象上添加类注解,以方便类检查。使用类注解可以避免一些类检查问题。 4. 使用类检查工具 Python 有多个类检查工具,如 MypyPyrightPyType 等。这些工具可以帮助开发者检测类错误,并提供更好的类检查支持。使用类检查工具可以减少类检查问题的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值