如何在一个 Python except 块中捕捉多个异常?
在 Python 中,我们经常会遇到需要捕捉不同类型异常的情况。一个简单的方法是使用多个 except 块来捕捉不同类型的异常,如下所示:
try:
# some code
except ValueError:
# handle ValueError exception
except ZeroDivisionError:
# handle ZeroDivisionError exception
以上代码中,我们使用了两个 except 块来捕捉 ValueError 和 ZeroDivisionError 异常。然而,如果需要捕捉的异常类型较多,会导致代码变得冗长。
Python 提供了一个更简便的方法可以在一个 except 块中捕捉多个不同类型的异常,如下所示:
try:
# some code
except (ValueError, ZeroDivisionError):
# handle ValueError or ZeroDivisionError exception
可以看到,我们使用了一个括号将要捕捉的异常类型括起来,用逗号分隔。这样,在 except 块中就可以同时捕捉多种类型的异常了。
下面是一个具体的例子,演示如何在一个 except 块中捕捉多个异常:
def division(x, y):
try:
result = x / y
except (ValueError, ZeroDivisionError):
print("Invalid input!")
else:
return result
以上代码中,我们定义了一个 division 函数,用于计算两个数相除的结果。在 try 块中,我们尝试求 x/y 的值,如果出现 ValueError 或者 ZeroDivisionError 异常,则在 except 块中打印 “Invalid input!” 的消息。如果正常执行,我们使用 else 块将计算结果返回。
现在,我们可以尝试调用 division 函数来验证代码是否能够正常捕捉多个异常:
print(division(10, 0)) # Invalid input!
print(division(10, "a")) # Invalid input!
print(division(10, 5)) # 2.0
可以看到,当传入的参数导致 ZeroDivisionError 或者 ValueError 异常时,函数会正确地打印 “Invalid input!” 的消息。而当输入正确的参数时,函数会返回计算结果。
更多Python文章,请阅读:Python 教程
结论
使用 except (exc1, exc2, …) 块可以在一个块中捕捉多个异常,这样可以使代码更加简洁。但需要注意的是,exc1、exc2 等需要是异常类型,而不是异常对象。