Python引发异常'generator'对象不支持项目赋值而不是'generator'对象不可订阅

时间:2013-11-22 02:04:16

标签: python exception generator

这是一个我只是出于好奇而问的问题。

我回答this question关于生成器的问题,引起的异常让我感到惊讶。我希望这两个都能给出相同的例外:

# Create a lame generator
a = (x for x in range(5))

# This raises a TypeError with the message "'generator' object is not subscriptable"
# I completely expected this.
a[0]

# Why doesn't this give the same message?
# This raises a TypeError with the message "'generator' object does not support item assignment"
# which is (I think) the exception raised when trying to assign to an immutable object.
a[0] = 2

我希望他们两个都引发一个TypeError,消息“'generator'对象不可订阅”,因为它似乎更重要。为什么要提供无法分配的消息,每当尝试访问元素时都会引发异常?

不确定这是否相关,但我使用的是Python 3.3。

1 个答案:

答案 0 :(得分:4)

这两个操作调用不同的方法;访问下标会调用__getitem__(),而设置下标会调用__setitem__()。每个都引发了一个不同的例外,因为每个例外都是不同的操作。