为什么内置切片功能不会针对不可能的切片条件引发异常?

时间:2019-05-06 08:20:04

标签: python

为什么#python不会为slice这样的对象抛出异常?

>>> y = slice(10, 2, 5) # impossible condition
>>> y
slice(10, 2, 5)
>>> x = [1, 2, 3]
>>> x[y] # applying the slice on an iterable
[]
>>>

slice函数应该抛出异常,因为slice(start = 10,stop = 2,step = 5)是不可能的情况。如果您从索引10开始并大步迈进5,您将永远不会到达索引2。

但是,slice函数很乐意接受该条件并保持安静(即返回一个空的slice)。考虑到禅宗的python状态“错误永远都不能静默传递”,我很好奇为什么选择这种行为来实现slice

1 个答案:

答案 0 :(得分:1)

如果结果为空的slice,则您期望slice无效。但是,slice的行为有所不同。调用slice并且result是切片对象时,可以定义条件。该文档说:

  

slice()返回一个切片对象,该对象用于对给定序列进行切片   索引。

因此,空片不被认为是例外情况,而是slice对象为空的情况。