PyCharm 2018.1中Type Hinting为何无法正常工作?
为什么Python类型提示没给出预期的警告?
哦,这事儿我刚接触类型提示的时候也懵过!其实核心原因是:Python本身是动态类型语言,它的类型提示只是给静态分析工具、IDE看的“语义注释”,Python解释器运行代码时会完全忽略这些标注——所以你直接运行代码的时候,不会有任何报错或者警告,哪怕类型不匹配也照样执行。
接下来给你几个解决办法,让你能看到预期的类型检查提示:
1. 用静态类型检查工具(最推荐)
最常用的就是mypy,它会帮你做静态类型分析,精准找出类型不匹配的问题:
- 先安装:
pip install mypy - 然后检查你的脚本:
这时候你写的mypy your_script.pya: int = 7.33就会弹出明确的警告:Incompatible types in assignment (expression has type "float", variable has type "int"),函数的类型问题也会被揪出来。
2. 开启IDE的实时类型检查
主流IDE都支持实时类型提示,只要开启对应的设置:
- PyCharm:默认就会开启类型检查,如果没看到提示,可以去
Settings > Editor > Inspections > Python > Type checking里确保相关选项勾选,就能在编辑器里实时看到红线警告。 - VS Code:安装官方Python插件后,打开设置(快捷键
Ctrl+,),搜索python.analysis.typeCheckingMode,把值改成basic或者strict,就能在编辑代码时实时看到类型不匹配的提示。
3. 运行时类型检查(可选,不推荐生产用)
如果想要在代码运行阶段也强制检查类型,可以用typeguard库:
- 安装:
pip install typeguard - 使用方式:给函数加
@typechecked装饰器,运行时类型不匹配就会抛出TypeError:
不过这种方式会增加运行时的性能开销,一般只在测试或者调试场景下用。from typeguard import typechecked @typechecked def sum_two_numbers(a:int , b:int)->int: return a+b sum_two_numbers(1, 2.5) # 运行时会直接报错:TypeError: argument 2 has incompatible type "float"; expected "int"
总结一下:类型提示的核心价值是提前在编码阶段发现问题,而不是运行时限制类型。所以想要看到你预期的警告,一定要用静态检查工具或者IDE的类型检查功能哦!
内容的提问来源于stack exchange,提问作者Notbad
相关产品推荐
相关产品推荐

