关于关键字:Python中“pass”的用例是什么?

What is the use case for “pass” in Python?

本问题已经有最佳答案,请猛点这里访问。

根据对这个问题的回答,python中的pass关键字完全不起作用。它只是表示"这里什么都不做"。

鉴于此,我不理解它的用途。例如,我在尝试调试其他人编写的脚本时查看以下代码块:

1
2
3
4
5
6
7
8
9
10
11
def dcCount(server):
    ssh_cmd='ssh [email protected]%s' % (server)
    cmd='%s"%s"' % (ssh_cmd, sub_cmd)
    output=Popen (cmd, shell=True, stdout=PIPE)
    result=output.wait()
    queryResult=""
    if result == 0:
        queryResult = output.communicate()[0].strip()
    else:
        pass
    takeData(server,"DC", queryResult)

在这里有没有任何目的?这是否以任何方式改变了函数的运行方式?似乎这个if/else块可以像下面这样重写,而不需要做任何更改:

1
2
3
if result == 0:
    queryResult = output.communicate()[0].strip()
takeData(server,"DC", queryResult)

…还是我错过了什么?而且,如果我没有遗漏什么,为什么我要使用pass关键字呢?


在你的例子中,它确实是无用的。

如果您希望块是空的,这有时是有用的,而这是Python不允许的。例如,在定义自己的异常子类时:

1
2
class MyException(Exception):
    pass

或者,您可能希望循环某个迭代器以获取其副作用,但不处理结果:

1
2
for _ in iterator:
    pass

但大多数时候,你不需要它。

记住,如果你可以添加一些不是评论的东西,你可能不需要通行证。例如,空函数可以采用docstring,它将作为一个块工作:

1
2
def nop():
   """This function does nothing, intentionally."""


pass在你不想做任何事情的时候使用,但是在语法上需要有一些东西。当我只想跳过有错误的行时,我最常用于try...except块,如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>>> try:
...    1/0
...
  File"<stdin>", line 3

    ^
SyntaxError: invalid syntax
>>> try:
...    1/0
... except:
...
  File"<stdin>", line 4

    ^
IndentationError: expected an indented block
>>> try:
...    1/0
... except:
...    pass
...
>>>


空类

空函数

或者,就像另一个人说的那样-像"except"这样的空条款


没有必要使用pass,您已经显示,它可以与else一起删除。不过,我发现pass偶尔有用,例如在注释条件体时,或在实现没有成员的类时:

1
2
class dummy:
    pass