Python中“pass”的用例是什么?

2 投票
4 回答
4400 浏览
提问于 2025-04-17 23:40

根据对这个问题的回答,Python中的pass关键字实际上什么都不做。它只是表示“这里什么都不做”。

既然如此,我就不明白它有什么用。例如,我在调试别人写的一个脚本时,看到了以下这段代码:

def dcCount(server):
    ssh_cmd='ssh user@subserver.st%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)

在这里使用else: pass到底有什么意义呢?这会以任何方式改变函数的运行吗?看起来这个if/else块可以像下面这样重写,完全没有变化:

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

...或者我是不是漏掉了什么?如果我没有漏掉什么,那我为什么还要使用pass关键字呢?

4 个回答

0

你提到的这个pass用法其实没什么意义,可以把它和else一起删掉。不过,我偶尔发现pass还是有用的,比如在条件语句里暂时不想执行任何代码时,或者在定义一个没有任何成员的类的时候:

class dummy:
    pass
1

空的类

空的函数

或者,就像其他人说的那样,像“except”这样的空语句

4

pass 是用来表示“什么都不做”的一种写法,但在语法上你必须要有一些东西。最常见的用法是在 try...except 代码块中,当我想跳过那些出错的行时,就会用到它,下面是一个示例:

>>> 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
...
>>>
11

在你的例子中,这确实没什么用。

不过,有时候它还是有帮助的,比如你想让一个代码块保持空白,而这在Python中是不能直接做到的。举个例子,当你定义自己的异常子类时:

class MyException(Exception):
    pass

或者你可能想遍历某个迭代器,只是为了它的副作用,但对结果不做任何处理:

for _ in iterator:
    pass

不过大多数情况下,你并不需要它。

记住,如果你能添加一些其他的东西,而不是注释,那你可能就不需要用到pass了。例如,一个空函数可以加上文档字符串,这样也能作为一个代码块:

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

撰写回答