__getitem __ / __ setitem__应该使用不受支持的切片步长的哪个例外?

时间:2015-11-07 20:33:22

标签: python exception slice

我在第三方模块中发现此代码,在这种情况下忽略了foo[::step]key.step

def __getitem__(self, key):
    if isinstance(key, slice):
        return self._sub_slice(key.start, key.stop)
    if self._is_in_range(key):
        return self._tree[key]
    else:
        raise KeyError(key)

虽然支持步骤是理想的,但假设不支持,我想添加一个例外,否则foo[a:b:-1]例如将忽略切片中的-1。 / p>

例如:

if key.step not in {None, 1}:
    raise Exception("only a step size of 1 is supported")

所以我的问题是,对于有效但不受支持的切片步骤, 应该使用哪种例外类型?

1 个答案:

答案 0 :(得分:2)

  

<强> ValueError异常

     

当内置操作或函数接收到具有正确类型但值不合适的值的参数时引发,并且情况不会由更精确的异常描述,例如IndexError

     

https://docs.python.org/3/library/exceptions.html#ValueError

“正确的类型,但不恰当的价值”似乎很符合您的描述。