这背后的设计思想是什么?
对我来说,做
之类的事情更容易if string.index(substring) > -1:
# do stuff
而不是试图捕捉异常。如果找不到substring
,至少您的程序不会中断。
有人告诉我'返回-1是一个糟糕的模式'。那是为什么?
检查子字符串的Pythonic方法是什么?
答案 0 :(得分:14)
str.index()
抛出异常;你可能会想到str.find()
method而不是:
if string.find(substring) > -1:
str.index()
documentation明确说明了这一点:
与
find()
类似,但在找不到子字符串时会引发ValueError
。
但是,测试子字符串成员资格的正确方法是使用in
:
if substring in string:
答案 1 :(得分:3)
因为这种方式至少修复了函数的返回类型。你的例子也不是pythonic,它应该是:
if str in string:
# do stuff
答案 2 :(得分:1)
Python在&#34的原则下运作;更容易请求宽恕而不是许可" (EAFP),如an answer by Sven Marnach中所述。它允许将公共路径的代码保持在一起,使逻辑更容易理解,而不会使内联错误处理混乱流程。在使用import threading
进行非阻塞I / O的程序中,只读取一次变量会使time-of-check-to-time-of-use (TOCTTOU)个错误的可能性低于其他一些语言所鼓励的先行先跳模式。< / p>
EAFP的主要缺点是Python的异常处理语法与函数式编程风格并不完美。您无法捕获可迭代输入中的各个元素的异常,而无需定义和命名函数。