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

自定义__getitem__方法的类实例参数解包时程序永不终止问题

代码运行逻辑与异常原因分析

涉及代码

class A:
    def __getitem__(self, key):
        return 1

print(*A())

底层运行逻辑

  • 执行print(*A())时,*运算符会尝试对A类的实例做可迭代对象解包,把解包得到的所有元素作为位置参数传入print函数。
  • Python对自定义类实例做迭代/解包操作时,优先查找类是否实现了__iter__方法;如果没有实现该方法,会自动降级为使用__getitem__方法实现迭代逻辑:迭代时会从整数索引0开始,依次调用__getitem__(0)、__getitem__(1)、__getitem__(2)……直到方法抛出IndexError或StopIteration异常,才会终止迭代。
  • 本例中类A的__getitem__方法无论接收的key参数是什么值,都会固定返回整数1,全程不会抛出任何异常。

程序无法正常结束的原因

基于上述迭代规则,解包A实例的过程会无限调用__getitem__方法,索引值从0开始无限递增,永远不会触发迭代终止的条件,程序直接进入死循环,无法推进到print的执行步骤,自然也无法正常结束运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:18:00