这是一个我只是出于好奇而问的问题。
我回答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。
答案 0 :(得分:4)
这两个操作调用不同的方法;访问下标会调用__getitem__()
,而设置下标会调用__setitem__()
。每个都引发了一个不同的例外,因为每个例外都是不同的操作。