侧边栏壁纸
博主头像
cn2linux博主等级

行动起来,活在当下

  • 累计撰写 128 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Python 循环的 else 子句与 raise 语句

Python 的 forwhile 循环提供了一个独特的 else 子句。这个子句只有在循环没有因 break 语句而提前结束时才会执行。

循环中使用 else 子句的例子

在下面的 contains 函数中,else 子句用来处理在循环中没有找到指定元素的情况:

def contains(haystack, needle):
    """
    Throw a ValueError if `needle` not in `haystack`.
    """
    for item in haystack:
        if item == needle:
            break
    else:
        # The `else` here is a "completion clause" that runs
        # only if the loop ran to completion without hitting
        # a `break` statement.
        raise ValueError('Needle not found')

使用示例

>>> contains([23, 'needle', 0xbadc0ffee], 'needle')
None

>>> contains([23, 42, 0xbadc0ffee], 'needle')
ValueError: "Needle not found"

更清晰的替代方法

尽管在循环中使用 else 子句是有效的,但它可能会导致代码阅读上的混淆。以下是一个更直观的替代方法:

def better_contains(haystack, needle):
    for item in haystack:
        if item == needle:
            return
    raise ValueError('Needle not found')

Pythonic 的成员检查方式

在 Python 中,进行成员检查的更常见(也更推荐)的方式是直接使用 in 关键字:

if needle not in haystack:
    raise ValueError('Needle not found')

0

评论区