大家是如何实时检查 Python 变量类型的?

2019-09-20 17:17:01 +08:00
 szzhiyang

我目前使用的 Python 实时类型检查方案是在 Microsoft Python Extension for VS Code 中启用 mypy --strict 检查,但是发现这个方案存在一些瑕疵,比如将鼠标悬停在某个变量名上方时 VS Code 不能详细提示它的类型(它只会把 Dict[str, int] 类型提示为 dict 类型)。

我还尝试过 PyCharm ,不过不知道是因为 PyCharm 本身做不到还是我没找对门路,我一直没能将它设置为实时使用 mypy 检查。

我现在想知道:




回复前必读:


5119 次点击
所在节点    Python
44 条回复
expkzb
2019-09-20 17:27:01 +08:00
变量名加类型后缀😂
szzhiyang
2019-09-20 17:27:58 +08:00
我承诺向认真回帖的热心 V 友发送感谢!
star00
2019-09-20 17:29:12 +08:00
换语言
shintendo
2019-09-20 17:30:06 +08:00
匈牙利命名法!
szzhiyang
2019-09-20 17:31:28 +08:00
@expkzb 我知道这个语法,我在帖子中说了。😂
szzhiyang
2019-09-20 17:33:03 +08:00
@shintendo 那该怎么命名类型为 Dict[str, Set[int]] 的变量呢?😂
ClericPy
2019-09-20 17:36:34 +08:00
Pydantic for the data parts.

fastapi 里看到这个, 感觉还行, vscode 里开个 mypy 凑合用
szzhiyang
2019-09-20 17:39:50 +08:00
@ClericPy 多谢,不过这个并不是我想要的那种,我想要的是一套 Linting 工具链。
janxin
2019-09-20 17:42:14 +08:00
这个看起来只是插件的问题,不过我试了一下我的插件的提示是正常的?
ClericPy
2019-09-20 17:43:51 +08:00
@szzhiyang 知道啊... 但是靠谱的试过都一般般啊, 之前最顺手是 pyright, 后来还是改回 mypy 了
szzhiyang
2019-09-20 17:44:25 +08:00
@janxin 请问你用的是什么编辑器的什么插件?它能提示 Dict[str, Set[int]] 这种复杂的类型吗?
szzhiyang
2019-09-20 17:46:21 +08:00
@ClericPy 谢谢你,我也试过 Pyright,不过它最严格的 Linting 规则达不到我的要求。😂
iyaozhen
2019-09-20 17:46:56 +08:00
对楼主需求场景不太了解。

日常开发中也有类型检查的需求,不过仅仅是方便对象方法提示,一般是通过注释显式表明类型。因为 pycharm 的类型推导确实不太准
SbloodyS
2019-09-20 17:50:05 +08:00
我用 typing....
ClericPy
2019-09-20 17:51:23 +08:00
@szzhiyang 哈哈... 你能试的都试过了, 所以最好去 Reddit 上问... Pydantic 解决的是在 linter 里友好的显示类型, 你要的反而是个 linter... Pycharm 已经够高级了, 要啥自行车
pakro888
2019-09-20 18:16:14 +08:00
使用 pycharm 按住 ctrl 同时指针悬浮到变量上可以提示吧。
janxin
2019-09-20 18:29:53 +08:00
跟你一样的插件,启用了 LSP。不过我只是看了一下同文件的,不同文件的没试过,理论上应该也差不多
szzhiyang
2019-09-20 18:33:52 +08:00
@janxin LSP 是啥?
szzhiyang
2019-09-20 18:37:06 +08:00
@ClericPy

很多非常明显的类型错误 PyCharm 都查不出来,比如下列代码:

test_str: str = "Hello World"
test_int: int = 123456
test_str += test_int

是因为我没设置好 PyCharm 吗?😂
clino
2019-09-20 18:44:48 +08:00
检查当然用 isinstance 啦 😄

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

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

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

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

© 2021 V2EX