让我们假设一个代码由近50行组成,并且有一个try
块。考虑try
块有10个未知错误的情况。无需在except
子句中指定错误的名称,是否可以处理这些异常?
这是示例代码:
try:
a = 2
b = 2 / 0
if 7 > 5:
print(7)
except(ZeroDivisionError, IndentationError)
print("Exception Handled")
在上述情况下,我知道在try块中发生的错误的名称(例如-ZeroDivisionError
和IndentationError
)
如果错误的名称未知,该怎么办?
答案 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")