如何在Python中为字面量空列表添加正确的类型提示?
为始终返回空列表的函数添加精确类型提示
你尝试用Literal[[]]的写法无效,是因为Mypy不支持将空列表作为Literal的参数——Literal仅适用于字符串、数字、布尔值这类字面量单例,而每次返回的[]都是新的列表实例,不符合Literal的适用场景。以下是几种正确的实现方式:
方案1:使用list[NoReturn]
NoReturn类型表示不存在任何可能的值,因此list[NoReturn]语义上就是“永远无法包含元素的列表”,完全匹配你“始终为空”的需求,Mypy能正确识别并做类型检查(比如尝试往该列表添加元素会直接报错)。
from typing import NoReturn def get_empty_list() -> list[NoReturn]: return []
方案2:自定义直观的类型别名
如果觉得list[NoReturn]的可读性不够,可以封装成更易懂的类型别名:
from typing import NoReturn EmptyList = list[NoReturn] def get_empty_list() -> EmptyList: return []
补充:如果允许返回不可变空容器
如果业务场景可以接受返回空元组(空元组是单例),可以用Literal[()]实现精确提示,但这仅适用于元组类型,不符合你要列表的需求,仅作参考:
from typing import Literal def get_empty_tuple() -> Literal[()]: return ()
内容的提问来源于stack exchange,提问作者houseofleft
相关产品推荐
相关产品推荐

