繁体   English   中英

为什么Python在找不到子字符串时会抛出错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM