Python中“pass”的用例是什么?
根据对这个问题的回答,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."""