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

Python报错'CartItem' object is not subscriptable及异常输出问题求解

报错原因与修复方案

1. 'CartItem' object is not subscriptable 报错根因

问题出在Cart类的__str__方法的遍历逻辑:

  • self.items里存储的元素本身就是CartItem实例,使用for item in self.items遍历的时候,每次取出的item已经是单个购物车项对象
  • 原代码额外加了item[index]的下标访问操作,但CartItem类没有实现__getitem__方法,不支持下标取值,因此触发报错

错误代码片段

for item in self.items:
  print(str(index) + ": " + item[index].name + ' --> ' + item[index].price)
  index += 1

修正逻辑

直接访问item的属性即可,不需要再加下标,也可以用enumerate简化索引遍历逻辑:

for index, item in enumerate(self.items):
  print(f"{index}: {item.name} --> {item.price}")

2. 输出对象内存地址的原因

你在addItem方法里写了print(self.items),打印列表时,Python会调用列表中每个元素的__repr__方法输出内容,而非__str__方法:

  • 你只给CartItem实现了__str__方法,没有实现__repr__方法,因此会输出默认的<__main__.CartItem object at 0x....>内存地址格式
  • 当你删除print(userCart)代码后,控制台输出的内存地址就是addItem里的print(self.items)打印的结果

如果要让打印列表时也输出可读内容,给CartItem类补充__repr__方法即可,比如可以直接自定义可读格式:

def __repr__(self):
  return f"{self.name} --> {self.price}"

修正后完整可运行代码

class CartItem:
  def __init__(self, name, price):
    self.name = name
    self.price = price
  def __str__(self):
    print(self.name + " --> " + self.price)
    return "-- item printed --\n"
  # 补充__repr__解决列表打印内存地址问题
  def __repr__(self):
    return f"{self.name} --> {self.price}"

class Cart:
  def __init__(self):
    self.items = []

  def __str__(self):
    if len(self.items) > 0:
      # 用enumerate简化索引遍历
      for index, item in enumerate(self.items):
        print(f"{index}: {item.name} --> {item.price}")
    else:
      print("No Items in Cart")
    return "-- cart items printed--\n"

  def addItem(self, cartItem):
    self.items.append(cartItem)
    print (cartItem.name + ", costing $" + cartItem.price + ", has been added to cart\n")
    print(self.items)

flarn = CartItem("flarn", "200.00")
print(flarn)
userCart = Cart()
userCart.addItem(flarn)
print(userCart)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:24:05