关于默认--follow-imports=normal下mypy错误报告规则的疑问
mypy --follow-imports=normal 错误报告行为解析
针对你在使用mypy时遇到的疑问,结合--follow-imports=normal(默认设置)的实际行为,解答如下:
核心结论
当执行mypy foo.py时,mypy会分析被foo.py导入的a.py、b.py来保障foo.py的类型检查准确性,但不会报告这些导入模块中的所有错误,仅会输出那些直接影响foo.py类型安全的错误。
针对你的疑问逐一解答
mypy是否会报告a.py和b.py中的所有错误?
不会。只有当a.py、b.py中的错误会直接影响foo.py对模块成员的使用时,才会被纳入报告。例如:如果a.py中存在一个未被foo.py调用的函数,该函数内部的类型错误不会被输出。是否仅报告a.py和b.py中对foo.py类型安全有直接影响的错误?
是的。具体场景包括:- 如果foo.py引用了a.py中的某个变量/函数/类,而该成员本身存在类型定义错误(比如函数参数类型标注错误),mypy会报告这个错误,因为它会影响foo.py中对该成员的调用正确性。
- 如果a.py中的错误属于内部未被引用的逻辑(比如私有函数的类型不匹配),这类错误不会出现在
mypy foo.py的输出结果里。
关于报错信息的说明
你看到的Found 25 errors in 3 files (checked 1 source file),其中的checked 1 source file指的是你显式指定的foo.py是唯一被作为“源文件”进行全量检查的模块;而mypy为了完成foo.py的类型检查,会对依赖的a.py、b.py进行必要的类型分析,那些被报告的其他文件错误,都是直接关联foo.py类型安全的部分。
内容的提问来源于stack exchange,提问作者ilovewt
相关产品推荐
相关产品推荐

