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中“通过”的用例是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章