我正在编写一个小函数,使用“模糊”比较返回字符串列表中第一次出现字符串的索引。
我的问题是:表示目标字符串与源列表中的任何字符串不匹配的正确方法是什么?
显而易见(唯一?)要做的就是返回-1。但是因为Python中的-1表示序列的最后一个元素,所以对我来说这可能不是一个好的Python风格。是否有更多的Pythonic(Pythonesque?)方式?
答案 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保持相同的设计原则,那么请使用您喜欢的任何风格。