Why does Python throw an error when a substring is not found?
这背后的设计思想是什么?
对我来说,做这样的事情更容易
1 2 | if string.index(substring) > -1: # do stuff |
而不是试图捕获异常。如果找不到
有人告诉我"返回-1是一个坏模式"。为什么会这样?
检查子串的方法是什么?
1 | if string.find(substring) > -1: |
Like
find() , but raiseValueError when the substring is not found.
然而,测试子串成员资格的正确方法是使用
1 | if substring in string: |
因为这样至少函数的返回类型是固定的。另外,你的例子不是Python,它应该是:
1 2 | if str in string: # do stuff |
正如SvenMarnach在回答中所解释的那样,python的工作原理是"请求宽恕比允许更容易"(EAFP)。它允许公共路径的代码保持在一起,从而使逻辑更容易理解,而不会在处理内联错误时使流混乱。在一个使用
EAFP的主要缺点是用于异常处理的python语法与函数式编程风格不匹配。如果不定义和命名函数,就无法捕获生成器表达式的可ITerable输入中单个元素的异常。