Python中“通过”的用例是啥? [复制]

Posted

技术标签:

【中文标题】Python中“通过”的用例是啥? [复制]【英文标题】:What is the use case for "pass" in Python? [duplicate]Python中“通过”的用例是什么? [复制] 【发布时间】:2014-05-01 23:07:39 【问题描述】:

根据对this question 的回答,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 关键字呢?

【问题讨论】:

我在 if elif elif else 情况下使用了它,在这种情况下,我需要测试其中一种可能性但未处理,因此它不会包含在 else 情况下(必须做一些事情) .例如,假设您必须传递结果 == 2,但 else 情况需要调用一个函数。 @sabbahillel 我不认为这是一个有效的用例,因为你可以简单地使用if result != 2: your_func() 而不是else: your_func()。在 if/else 中,你可以只写你的条件,而不是使用这个pass 关键字。 我的意思是,假设您有多种情况,对于标志的各种值,您必须小心 else 情况不包括其中一种情况。这就像c中的开关情况。 Flag 可以是多个值,其中一个值什么也做不了。您不能将它作为 else (默认情况)的一部分,因为需要做其他事情。所以你会有 elif flage ==x: pass 以及许多其他检查。这就是我的意思。 【参考方案1】:

在你的例子中确实没用。

如果您希望块为空,这有时会很有帮助,Python 不允许这样做。例如,在定义自己的异常子类时:

class MyException(Exception):
    pass

或者,也许您想遍历一些迭代器以了解其副作用,但对结果不做任何事情:

for _ in iterator:
    pass

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

请记住,如果您可以添加不是评论的其他内容,则可能不需要通过。例如,一个空函数可以接受一个文档字符串,它可以作为一个块工作:

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

【讨论】:

+1 我也认为扩展异常是更有用的用法(调试和延迟实现除外)。【参考方案2】:

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

【讨论】:

啊,所以它主要是用来吞下异常的?这似乎是一种不好的做法。 在我演示的特定情况下,是的,这就是它的作用。一般来说,它是程序员绕过一些简单案例的语法要求的一种方式 @JeffGohlke 如果与这些示例中的全部异常一起使用将是一种不好的做法,但对于特定异常来说这是合理的。【参考方案3】:

空类

空函数

或者,就像另一个人说的那样——像“except”这样的空子句

【讨论】:

【参考方案4】:

你显示的pass的使用没有意义,可以和else一起去掉。不过,我发现 pass 偶尔有用,例如在注释掉条件主体时,或者在实现没有成员的类时:

class dummy:
    pass

【讨论】:

除了在 REPL 中进行快速而肮脏的检查时,我认为没有成员的类仍然应该有一个文档字符串。 (在这种情况下,文档字符串将消除对 pass 的需要。) @kojiro:当然,也许我应该说我很少在生产环境中使用pass——甚至比开发期间还要少!

以上是关于Python中“通过”的用例是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

bash中noop [:]的用例是啥?

NuxtJs asyncData 的用例是啥?

IEEE 754 中 Infinity 的用例是啥

Streams 和 Firehose 的用例是啥?

TypeScript 中的“as const”是啥意思,它的用例是啥?

DataSet Spark 的用例是啥?