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

Python 3.9及更高版本中print(set[0])不报错的原因?

为什么Python 3.9+中set[0]不抛出TypeError反而输出set[0]?

这不是异常行为,而是Python 3.9引入的泛型类型注解语法带来的变化:

  • 在Python 3.9之前,set只是普通的内置类,尝试对类本身使用下标(比如set[0])会触发TypeError: 'type' object is not subscriptable,因为类对象本身不支持下标操作。
  • 从Python 3.9开始,Python为标准库中的容器类型(包括set、list、dict等)添加了泛型支持,set被重构为泛型类。此时set[X]的语法不再是下标访问,而是用来表示元素类型为X的泛型集合类型。
  • 当你执行print(set[0])时,Python会将其解析为一个泛型类型实例,打印时输出它的字符串表示set[0]。虽然0作为类型参数没有实际的类型提示意义,但语法上是合法的——Python允许将任意对象(不仅仅是类型)作为泛型参数传入。

举个更有实际意义的例子:在类型提示中,我们可以写def process_numbers(nums: set[int]) -> None:,用来表示nums是一个整数集合,这就是泛型语法的典型用法。

内容的提问来源于stack exchange,提问作者Alexander Belyakov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:14:52