如何用Python实现同时捕获并处理多个异常?
- 内容介绍
- 文章标签
- 相关推荐
本文共计798个文字,预计阅读时间需要4分钟。
问题:如何避免在代码片段中因可能出现的多个不同异常而大量重复代码?解决方案:可以将不同的异常处理逻辑封装到一个统一的代码块中。
问题
你有一个代码片段可能会抛出多个不同的异常,怎样才能不创建大量重复代码就能处理所有的可能异常呢?
解决方案
如果你可以用单个代码块处理不同的异常,可以将它们放入一个元组中,如下所示:
try: client_obj.get_url(url) except (URLError, ValueError, SocketTimeout): client_obj.remove_url(url)
在这个例子中,元祖中任何一个异常发生时都会执行 remove_url() 方法。 如果你想对其中某个异常进行不同的处理,可以将其放入另外一个 except 语句中:
try: client_obj.get_url(url) except (URLError, ValueError): client_obj.remove_url(url) except SocketTimeout: client_obj.handle_url_timeout(url)
很多的异常会有层级关系,对于这种情况,你可能使用它们的一个基类来捕获所有的异常。
本文共计798个文字,预计阅读时间需要4分钟。
问题:如何避免在代码片段中因可能出现的多个不同异常而大量重复代码?解决方案:可以将不同的异常处理逻辑封装到一个统一的代码块中。
问题
你有一个代码片段可能会抛出多个不同的异常,怎样才能不创建大量重复代码就能处理所有的可能异常呢?
解决方案
如果你可以用单个代码块处理不同的异常,可以将它们放入一个元组中,如下所示:
try: client_obj.get_url(url) except (URLError, ValueError, SocketTimeout): client_obj.remove_url(url)
在这个例子中,元祖中任何一个异常发生时都会执行 remove_url() 方法。 如果你想对其中某个异常进行不同的处理,可以将其放入另外一个 except 语句中:
try: client_obj.get_url(url) except (URLError, ValueError): client_obj.remove_url(url) except SocketTimeout: client_obj.handle_url_timeout(url)
很多的异常会有层级关系,对于这种情况,你可能使用它们的一个基类来捕获所有的异常。

