Tob*_*ann 3 static-typing typechecking type-hinting python-3.x mypy
(这是对这个问题的跟进。)
我的代码库是完全静态类型的(注释),但在某些时候有Any类型,例如,因为一个值是从 JSON 字符串中解析出来的。这是我的最小示例:
import json
from typing import Any, Dict, Union
def main() -> None:
data = json.loads('{"value" = "three"}')
my_int: int = data['value']
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
mypy --strict接受此代码。不过我想自动找到这些地方,采取相应的安全措施。
有没有可能mypy抱怨这个my_int: int = data['value']任务?
是的——使用“禁止任何”系列的命令行标志。
在这种情况下,我认为您想专门使用--disallow-any-expr,但我建议您也尝试使用其他标志。
(这些标志不会作为一部分自动启用,--strict因为它们最终会在某些代码库上造成大量误报,尤其是那些广泛使用无类型库的代码库。)
顺便说一句,您可能会发现启用所有“禁止任何”标志最终会有点不方便,特别是如果您的代码的某个区域需要进行大量运行时检查。
为了帮助缓解这种情况,我个人喜欢做的是默认启用所有禁止任何标志,但为某些模块禁用其中一些标志。你可以使用 mypy 的配置文件来做到这一点。例如,你可以这样做:
[mypy]
# Specify any other global flags you want to customize here
disallow_any_unimported = True
disallow_any_expr = True
disallow_any_decorated = True
disallow_any_explicit = True
disallow_any_generics = True
disallow_subclassing_any = True
[mypy-mymodule.validation]
# Weaken, just for this module
disallow_any_expr = False
Run Code Online (Sandbox Code Playgroud)
并运行mypy --strict --config my_config.ini mymodule。
这个配置文件将不允许在Any几乎整个代码库中使用,除了在validation模块内。(然后,我会不遗余力地为该特定模块添加一堆单元测试,以弥补弱化的静态类型检查。)
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |