如何在Python函数结果中发出“索引未找到”的信号

时间:2014-01-12 23:42:39

标签: python indexing

我正在编写一个小函数,使用“模糊”比较返回字符串列表中第一次出现字符串的索引。

我的问题是:表示目标字符串与源列表中的任何字符串不匹配的正确方法是什么?

显而易见(唯一?)要做的就是返回-1。但是因为Python中的-1表示序列的最后一个元素,所以对我来说这可能不是一个好的Python风格。是否有更多的Pythonic(Pythonesque?)方式?

3 个答案:

答案 0 :(得分:2)

  

我的问题是:表示目标字符串与源列表中的任何字符串不匹配的正确方法是什么?

引发错误

raise ValueError("String Not Found")

Python是 duck typed 语言;请参阅:http://en.wikipedia.org/wiki/Duck_typing因此,“提出适当的错误”是完全可以接受和接受的惯例。

更新:像往常一样,现在已经有几个答案,评论甚至使用raise ValueError的建议。 IHMO我相信IndexError更合适;但这可能是风格和个人品味的问题。另请阅读:The Zen of Python - 特别是在行周围“应该有一个 - 最好只有一个 - 显而易见的方法。”

更新II:我认为为了保持一致性,Pyton的内置list.index()str.index() raise ValueError(...)应该使用:)

答案 1 :(得分:1)

您可以返回None这是一个空对象。

要检查结果,您可以使用is运算符。查看null object in Python?

答案 2 :(得分:1)

根据Python文档;

str.rindex; Like rfind() but raises ValueError when the substring sub is not found.

str.rfind(); Return -1 on failure

如果你想保持与Python的std lib相同的设计,假设你的函数与str.rindex几乎完全相同,那么引发ValueError()。但是如果你的函数更像是rfind,那么返回-1。

如果您不关心与std libs保持相同的设计原则,那么请使用您喜欢的任何风格。

请参阅http://docs.python.org/2/library/stdtypes.html#str.count