说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在 Python 3.11 中引入的“抛出和处理多个异常”这个特性,内置类型 ExceptionGroup 和 BaseExceptionGroup 使得将异常划分成组并一起引发成为可能,新添加的 except*
是对 except
的泛化语法,这一语法能够匹配异常组的子组。
想象一下,你有一个开发团队,每个人都有自己独特的技能。Python 3.11中的 ExceptionGroup 就是这样——一个由异常处理程序组成的团队,准备处理不同类型的错误。它允许我们在一个代码块中捕获多个异常,为我们节省了时间和精力。
Python 3.11 中引入的“抛出和处理多个异常”特性是一项极具实用性的改进。在以往,Python 的异常处理机制允许在 try 语句中捕获多种异常类型,但在抛出异常时,却仅能抛出单一异常。这意味着在处理一系列操作时,若需要报告多个错误,可能不得不选择抛出其中一个异常,而忽略其他,或者创建新的异常类型来封装这些异常,增加了处理复杂度。
新机制允许开发者在一个 except 块中同时抛出多个异常,这得益于引入了一个新的异常类 ExceptionGroup。ExceptionGroup 能够包装一组异常,使得开发者可以一次性处理多个相关的异常。
这个特性的核心思想是,在处理一系列操作时,若遇到多个异常,你可以将它们收集起来,然后用一个 ExceptionGroup 实例抛出。随后,在 except 块中捕获这个 ExceptionGroup,并逐个处理其中的异常。
当您希望将类似的错误处理逻辑应用于不同的异常时,异常组可能特别有用,从而避免需要在多个不同的块中重复相同的代码。
以下是一个案例:
def addition():
a = 10
print (a + 'string')
def create_exception_group():
exp_group = ExceptionGroup(
"This is exception group",
[
TypeError("Must be an init"),
KeyError("Key must be in dictionary"),
FileNotFoundError("File not found"),
],
)
raise exp_group
try:
addition()
create_exception_group()
except* FileNotFoundError as eg:
print("Hello World")
except* KeyError as eg:
print("Hello from KeyError")
except* TypeError as tg:
print("Hello from type")
这段代码展示了如何使用自定义的异常组 ExceptionGroup 以及如何在异常处理中捕获和处理多个异常。
except*
语法来捕获多个异常类型。这里通过 FileNotFoundError、KeyError 和 TypeError 分别捕获了三种不同类型的异常,并分别输出相应的提示信息。更新时间:2024-04-11 10:53:18 标签:python 异常 异常组