You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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配置实现批量忽略:

  1. 定义一个自定义装饰器(比如internal_method)
  2. 在mypy配置文件(如mypy.ini)中添加该装饰器到忽略列表:
[mypy]
disallow_untyped_defs = True
ignore_errors_decorators = your_module.internal_method
  1. 在代码中用该装饰器标记内部方法:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 14:13:24