HOWTO · Python

在 Python 中使用 pass 语句

本教程演示了 Python 中 pass 语句的使用。

本页内容

Python 的 pass 语句运行时什么也不做。当 Python 语法要求此处必须有一条语句,而你还没决定程序的这一部分要做什么时,它就很有用。它能让草拟中的代码结构保持有效,但不会实现函数名或分支名称所暗示的行为。

pass 语句的作用

与注释不同,pass 是一条由 Python 执行的空操作语句。它不会更改任何变量,也不会自行返回值,更不会跳过循环或函数的其余部分。你可以在勾勒代码结构时暂时使用它,但在依赖程序的这一部分之前,应将它替换为预期的行为。

运行此示例:

本节中的代码以及显示的标签或输出仍为英文。

def prepare_report():
    pass

prepare_report()

函数已经定义,可以调用,但调用时不会准备任何报告。函数执行到末尾时,如果没有显式的 return,就会返回 None;pass 不会让它返回有用的结果。

在函数和类主体中使用 pass

函数或类主体在语法上不能留空。在规划实现时,可以用一条 pass 标明主体有意暂时未完成:

本节中的代码以及显示的标签或输出仍为英文。

def load_records(path):
    pass

class RecordStore:
    pass

这些定义不会加载记录,也不提供存储行为。请将占位内容替换为实际实现;如果调用函数时应明确表示它尚未完成,也可以抛出清晰的 NotImplementedError。不要用 pass 代替承诺要返回的值或已经完成的方法。

在条件分支和循环主体中使用 pass

同样的规则适用于分支和循环:被选中的主体会运行,但 pass 语句本身不会产生任何效果。例如,你可以暂时保留一个空分支的结构,同时考虑该如何处理这种情况:

本节中的代码以及显示的标签或输出仍为英文。

for item in ["ready", "skip"]:
    if item == "skip":
        pass
    else:
        print(item)

在这里,循环执行 pass 分支后,仍会继续处理下一个项目;另一个分支则会打印当前项目的值。示例打印的 ready,以及字符串值 ready 和 skip,都保持英文。如果你确实想跳过某个项目,可以在适当的情况下使用 continue 清楚地表达这一意图;与 pass 不同,continue 会直接进入下一轮循环。

避免用 pass 静默忽略异常

在异常处理器中放入 pass,会抑制捕获到的异常,却不报告它,也不从中恢复。裸写的 except 可能捕获远超预期的错误,使缺陷难以排查。应避免静默吞掉错误:

本节中的代码以及显示的标签或输出仍为英文。

try:
    amount = int("not a number")
except ValueError as error:
    print(f"Could not parse amount: {error}")

捕获你能够处理的特定异常,然后进行恢复、报告有用的上下文,或重新抛出异常。如果某个异常确实无关紧要,请说明原因,并尽可能缩小处理器的范围。示例中的错误消息保持英文。只有在经过审慎评估、确实决定丢弃某个特定错误时,才在异常处理器中使用 pass;它无法修复根本问题。