通常在python中使用pass
语句,如下面的代码片段。
try:
os.makedirs(dir)
except OSError:
pass
所以,'通过'基本上没有做任何事情。在这种情况下,为什么我们仍然会在程序中添加这样的代码?我很迷惑。非常感谢您的时间和关注。
答案 0 :(得分:5)
这是解析器。如果你写了这个:
try:
# Code
except Error:
然后在extra spot中没有任何内容,解析器会发出错误信号,因为它会错误地识别下一个缩进级别。想象一下这段代码:
def f(x):
try:
# Something
except Error:
def g(x):
# More code
解析器期望一个语句具有比except语句更大的缩进,但得到了一个新的顶级定义。 pass
只是填充以满足解析器。
答案 1 :(得分:2)
这是为了防止代码在try
块中的行之后继续。如果你不抓住它 - 它要么跳过执行直到它被别处抓到 - 要么完全失败了程序。
假设您正在创建一个尝试打印到打印机的程序,但也打印到标准输出 - 如果打印机不可用,您可能不希望它存档:
try:
print_to_printer('hello world')
except NoPrinterError:
pass # no printer - that's fine
print("hello world")
如果您不使用try-catch,则在捕获到异常(或将使程序失败)之前,错误将停止执行,并且不会将任何内容打印到标准输出。
答案 2 :(得分:0)
pass
用于告诉程序在捕获错误时要执行的操作。在这种特殊情况下,你几乎无视它。因此,您正在运行脚本,如果遇到错误,请不要担心原因和方法。
特殊情况是当你确定预期的时候。在其他情况下,您可以break
并结束程序,甚至将错误分配给变量,以便您可以使用except Error as e
调试程序。
try:
os.makedirs(dir)
except OSError:
break
或:
try:
os.makedirs(dir)
except OSError as e:
print(str(e))
答案 3 :(得分:0)
try:
# Do something
except:
# again some code
# few more code
pass
有两种用法。首先,也是最重要的用途: - 如果try
下的代码出现异常,执行将跳转到except
块。如果except
块内没有任何内容,它将首先抛出IndentationError
。因此,为了避免此错误,即使出现异常时您无需执行任何操作,也需要将pass
置于except
块内。
第二种用法,如果你在try-except块之后有更多的代码片段(例如again some code
和few more code
),并且你没有把pass放在里面除外,那么那段代码将会不执行(实际上整个代码都不会执行,因为编译器会抛出IndentationError
)。因此,为了优雅地处理场景并告诉解释器在except
块之后执行行,我们需要将pass放在except块内,即使我们不想在异常的情况下做任何事情。
因此,从名称开始的pass
处理except
块,然后将执行转移到except
块下面的下一行。