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

Python类型注解中(int, list)写法报错的原因与解决方法

报错原因

Python类型注解有明确的语法规范,直接写(int, list)属于非法写法:

  • 括号包裹、逗号分隔的形式在类型注解语境下,不会被自动识别为「支持int和list两种类型」
  • 这种写法只会被解析为元组字面量表达式,但类型注解要求元组类型必须显式通过Tuple类声明,多类型联合必须显式通过Union或|运算符声明,不符合规则就会抛出你看到的报错。

你的代码里lower、upper参数的设计是既支持传入单个整数,也支持传入列表,属于多类型联合的场景,不能直接把多个类型塞在括号里做注解。

修正方案

根据你使用的Python版本选择对应写法即可:

全Python3版本兼容写法

需要先从标准库typing导入对应的类型工具:

from typing import Union, Optional

def randint_sum_equal_to(
    sum_value: int,
    n: int,
    lower: Union[int, list] = 0,
    upper: Optional[Union[int, list]] = None
):
    # 此处填写函数内部逻辑
    pass

语法说明:

  • Union[int, list]:表示参数允许传入int类型或者list类型的值
  • Optional[Union[int, list]]:因为upper默认值是None,这个写法等价于Union[int, list, None],明确标记该参数允许传入None

Python 3.10+ 简化写法

Python 3.10版本开始原生支持|作为联合类型运算符,不需要导入typing模块的对应类,写法更简洁:

def randint_sum_equal_to(
    sum_value: int,
    n: int,
    lower: int | list = 0,
    upper: int | list | None = None
):
    # 此处填写函数内部逻辑
    pass

补充说明:如果你需要约束列表内部的元素类型(比如要求列表元素全为整数),可以把注解写得更精确:3.9及以上版本直接写list[int]即可,3.8及更早版本需要从typing导入List后写List[int],能获得更准确的类型检查提示。

内容的提问来源于stack exchange,提问作者Mayyar Mansour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:18:20