为什么我们在python的错误处理中使用'pass'?

时间:2015-07-11 00:30:13

标签: python

通常在python中使用pass语句,如下面的代码片段。

try:
  os.makedirs(dir)
except OSError:
  pass

所以,'通过'基本上没有做任何事情。在这种情况下,为什么我们仍然会在程序中添加这样的代码?我很迷惑。非常感谢您的时间和关注。

4 个答案:

答案 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 codefew more code),并且你没有把pass放在里面除外,那么那段代码将会不执行(实际上整个代码都不会执行,因为编译器会抛出IndentationError)。因此,为了优雅地处理场景并告诉解释器在except块之后执行行,我们需要将pass放在except块内,即使我们不想在异常的情况下做任何事情。

因此,从名称开始的pass处理except块,然后将执行转移到except块下面的下一行。