如何在try块中处理多个异常?

时间:2019-06-20 12:47:41

标签: python exception

让我们假设一个代码由近50行组成,并且有一个try块。考虑try块有10个未知错误的情况。无需在except子句中指定错误的名称,是否可以处理这些异常?

这是示例代码:

try:
    a = 2
    b = 2 / 0
    if 7 > 5:
        print(7)
except(ZeroDivisionError, IndentationError)
    print("Exception Handled")

在上述情况下,我知道在try块中发生的错误的名称(例如-ZeroDivisionErrorIndentationError) 如果错误的名称未知,该怎么办?

3 个答案:

答案 0 :(得分:1)

try:
   #maliciousCodeFound
except:
   #catches ANY exception

除了此处捕获try块中遇到的每个错误外,您无需指定异常类型。 但是,如果您想捕获并处理特定类型的异常(例如,算术异常),则可能要使用它来处理该特定情况。否则,请使用除外。

答案 1 :(得分:1)

将要捕获的所有异常放入 tuple 中,如下所示:

try:
    a = 2
    b = 2 / 0
    if 7 > 5:
        print(7)
except (ZeroDivisionError, IndentationError) as e:
    print("Exception:", e)

输出:Exception: division by zero

答案 2 :(得分:1)

异常层次结构

大多数异常是Exception类的子类。但是,并非所有例外情况都如此。异常本身实际上是从称为BaseException的类继承的。实际上,所有异常都必须扩展BaseException类或其子类之一。

Exception 直接源自 BaseException ,而我们处理的异常通常源自 Exception SystemExit KeyboardInterrupt 这是两个主要的例外,它们直接从BaseException派生而不是从Exception派生。当我们使用except:子句而未指定任何异常类型时,它将捕获BaseException的所有子类。也就是说,它将捕获所有异常,包括两个特殊的异常

因此,请勿使用except:,而应使用:

try:
    # thing you want to try
except Exception:
    # handle exception

编辑:

try:
    a = 2
    print("The next step the program will catch an exception.")
    b = 2 / 0
    if 7 > 5:
        print("This will never run.")
        print(7)
except Exception:
    print("Exception Handled")