[英]Why does Python throw an error when a substring is not found?
这背后的设计思想是什么?
对我来说,更容易做类似的事情
if string.index(substring) > -1:
# do stuff
而不是试图捕捉异常。 如果找不到substring
,至少你的程序不会中断。
有人告诉我'回归-1是一种糟糕的模式'。 这是为什么?
检查子串的Pythonic方法是什么?
str.index()
抛出异常; 您可能正在考虑使用str.find()
方法 :
if string.find(substring) > -1:
str.index()
文档明确说明了这一点:
与
find()
类似,但在找不到子字符串时引发ValueError
。
然而,以测试子成员的正确方法是使用in
:
if substring in string:
因为这种方式至少修复了函数的返回类型。 你的例子也不是pythonic,它应该是:
if str in string:
# do stuff
正如Sven Marnach在回答中所解释的那样,Python的运作原则是“更容易请求宽恕而非许可”(EAFP)。 它允许将公共路径的代码保持在一起,使逻辑更容易理解,而不会使内联错误处理混乱流程。 在使用import threading
进行非阻塞I / O的程序中,只读取一次变量会使得使用时间检查(TOCTTOU)错误的可能性比前瞻性跳跃时更少。一些其他语言鼓励的风格。
EAFP的主要缺点是Python的异常处理语法与函数式编程风格不相符。 在不定义和命名函数的情况下,您无法捕获可迭代输入中的单个元素的异常,无法生成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.