含assert语句的Python函数返回类型及类型注解如何定义?
为带断言的Python函数添加正确的类型注解
你的函数在断言通过时返回None,失败时抛出AssertionError,类型注解的核心是描述合法调用场景下的类型契约——类型检查器(如mypy)默认假设断言的前置条件会被满足,不会处理断言失败的分支(这属于运行时错误范畴)。
基础类型注解(针对整数参数)
如果函数仅接收整数类型参数,直接明确参数和返回值类型即可:
def foo(a: int, b: int) -> None: assert a == b, "a isn't equal to b"
通用类型注解(支持任意可比较类型)
如果需要函数支持任意相同类型的可比较参数(比如字符串、浮点数),可以用泛型TypeVar实现通用约束:
from typing import TypeVar T = TypeVar('T') def foo(a: T, b: T) -> None: assert a == b, "a isn't equal to b"
这里T代表任意类型,约束a和b必须为同一类型,同时隐含要求该类型支持==比较操作。
类型检查逻辑说明
- mypy等工具会将断言视为前置条件,默认认为调用者会保证
a == b成立,因此不会针对断言失败的分支做类型推导。 - 当传入不符合条件的参数(如
foo(3,4)),mypy不会强制报错(除非启用--strict或--warn-unused-asserts等严格选项),但运行时会正常抛出AssertionError——类型检查负责保证类型合规,断言负责运行时的业务逻辑校验,二者职责清晰。
内容的提问来源于stack exchange,提问作者maskalev
相关产品推荐
相关产品推荐

