Python list.index在找不到索引时抛出异常

Joa*_*nge 14 python indexing list

为什么list.index抛出异常,而不是使用任意值(例如-1)?这背后有什么想法?

对我而言,处理特殊价值而非例外情况看起来更清晰.

编辑:我没有意识到这-1是一个潜在有效的价值.不过,为什么不是别的呢?无价值怎么样?

Dev*_*rre 13

因为-1它本身是一个有效的索引.它可以使用不同的值,例如None,但是没有用,这-1可能在其他情况下(因此str.find()),并且仅仅是错误检查,这正是异常的用途.


ami*_*mit 8

添加Devin的回答:这是特殊回报值与异常之间的旧争论.许多编程专家更喜欢异常,因为在异常情况下,我会看到整个堆栈跟踪并立即推断出错误.

  • +1:例外并不取决于某些"神圣"的价值.例外通常更容易使用. (3认同)
  • 这就是我想知道的:特殊返回值与异常。 (2认同)
  • 最后一条评论忽略了这样一个事实:底层函数当然需要检查导致其_失败_的条件。对特殊值的额外检查可以忽略不计。更大的问题确实是,如果没有发现任何东西就是错误。这当然取决于用例。然而,这是一个低级函数,不应通过依赖缓慢的异常处理来强制执行任何特定用途,因此这显然是糟糕的设计,因为唯一的选择是重新实现它或使用更多降低性能的技术就像先检查计数一样。 (2认同)

var*_*tec 7

那么,特殊值实际上必须是None,因为-1是一个有效的索引(意味着列表的最后一个元素).

您可以通过以下方式模拟此行为:

idx = l.index(x) if x in l else None
Run Code Online (Sandbox Code Playgroud)

  • 好吧,就是那个或尝试/除外. (3认同)
  • 有时,Python 的编写似乎是为了让您为最简单的事情编写尽可能多的代码。感谢你的回答! (2认同)