如何让mypy忽略私有(内部)方法的no-untyped-def错误
如何让mypy忽略内部方法的无类型注解检查?
当开启disallow-untyped-defs参数后,mypy会对所有无类型注解的函数抛出no-untyped-def错误。若只想检查公共方法(非下划线开头),忽略_或__开头的内部方法,可通过以下方式实现:
方法一:逐个添加忽略注释
直接在内部方法的定义行末尾添加# type: ignore[no-untyped-def]注释,精准跳过该方法的无类型注解检查:
def foo(a, b): return a + b def _bar(a, b): # type: ignore[no-untyped-def] return a + b def __baz(a, b): # type: ignore[no-untyped-def] return a + b
方法二:使用no_type_check装饰器批量标记
从typing模块导入no_type_check装饰器,为所有内部方法添加该装饰器,mypy会自动跳过这些方法的类型检查:
from typing import no_type_check def foo(a, b): return a + b @no_type_check def _bar(a, b): return a + b @no_type_check def __baz(a, b): return a + b
方法三:自定义装饰器+配置文件批量处理(进阶)
如果项目中有大量内部方法,可通过自定义装饰器结合mypy配置实现批量忽略:
- 定义一个自定义装饰器(比如
internal_method) - 在mypy配置文件(如
mypy.ini)中添加该装饰器到忽略列表:
[mypy] disallow_untyped_defs = True ignore_errors_decorators = your_module.internal_method
- 在代码中用该装饰器标记内部方法:
def internal_method(func): return func def foo(a, b): return a + b @internal_method def _bar(a, b): return a + b @internal_method def __baz(a, b): return a + b
执行mypy --disallow-untyped-defs --check-untyped-defs <module_name>后,仅foo方法会触发no-untyped-def错误,符合预期。
内容的提问来源于stack exchange,提问作者Seljuk Gulcan
相关产品推荐
相关产品推荐

