一篇详细教程Python错误和异常处理之捕获异常


dfcdcd5373faab46508ef5ba0b2fa5cb.gif

作者:郭震

我们之前介绍了异常的概念,包括什么是异常、异常的分类,以及为什么异常处理在程序中是如此重要.在本篇中,我们将重点探讨如何捕获异常,使程序在发生错误时能优雅地处理这些错误,而不是异常终止.

捕获异常的基本语法

在 Python 中,可以使用 try...except 语句来捕获异常.其基本结构如下:

try:
    # 可能会发生异常的代码块
    ...
except ExceptionType:
    # 异常发生后的处理代码
    ...

其中,ExceptionType 是你期待捕获的异常类型.如果在 try 块中的代码抛出了指定类型的异常,则 except 块中的代码将被执行.

示例:捕获特定异常

以下是一个简单的示例,用于捕获除零异常:

def divide(a, b):
    try:
        result = a / b
        print(f"结果是: {result}")
    except ZeroDivisionError:
        print("错误:不能除以零!")

divide(10, 2)  # 输出: 结果是: 5.0
divide(10, 0)  # 输出: 错误:不能除以零!

在这个示例中,divide 函数尝试进行除法运算.如果除数 b 为零,则抛出 ZeroDivisionError 异常,进入 except 块进行处理.

捕获多个异常

你可以使用多个 except 语句来处理不同类型的异常,或使用元组来同时捕获多个异常.例如:

def divide(a, b):
    try:
        result = a / b
        print(f"结果是: {result}")
    except (ZeroDivisionError, TypeError) as e:
        print(f"发生错误: {e}")

divide(10, 2)    # 输出: 结果是: 5.0
divide(10, 0)    # 输出: 发生错误: division by zero
divide(10, 'a')  # 输出: 发生错误: unsupported operand type(s) for /: 'int' and 'str'

在这个示例中,函数 divide 不仅处理了 ZeroDivisionError,还处理了 TypeError,并给出相应的反馈.

捕获所有异常

有时可能希望捕获所有类型的异常,可以使用不指定异常类型的 except 块:

def divide(a, b):
    try:
        result = a / b
        print(f"结果是: {result}")
    except Exception as e:  # 捕获所有异常
        print(f"发生错误: {e}")

divide(10, 2)    # 输出: 结果是: 5.0
divide(10, 0)    # 输出: 发生错误: division by zero
divide(10, 'a')  # 输出: 发生错误: unsupported operand type(s) for /: 'int' and 'str'

需要注意的是,虽然捕获所有异常可以使程序更加健壮,但这也可能掩盖了其他潜在的问题,因此在实际项目中,应当谨慎使用.

finally 块

try 语句块可以包括一个 finally 块,它在 tryexcept 完成后执行,无论是否发生异常.这在需要进行清理操作时非常有用:

def divide(a, b):
    try:
        result = a / b
        print(f"结果是: {result}")
    except ZeroDivisionError:
        print("错误:不能除以零!")
    finally:
        print("清理工作完成。")

divide(10, 2)  # 输出: 结果是: 5.0
                 # 清理工作完成。
divide(10, 0)  # 输出: 错误:不能除以零!
                 # 清理工作完成。

在这个示例中,finally 块确保在每次调用之后都会打印“清理工作完成”.

总结

在本篇教程中,我们学习了如何通过 try...except 结构捕获异常,处理程序中的错误,以及使用 finally 块进行清理工作.在下一篇中,我们将继续深入探讨如何自定义异常,以便在面临特定的错误情况下提供更自定义的错误处理.

在实际开发中,异常处理是构建健壮程序的重要一环,希望大家能在日常编码中灵活运用!

感谢你的支持,原创不易,希望转发,点击,以及收藏,也可以点击阅读原文更多AI知识分享,同时也可以关注知识星球:郭震AI学习星球

最后,若想利用副业时间提高技能和收入,可以加入我的星球:

7be3e69a30378db12a9873ea1f414960.png

长按上图二维码查看「郭震AI学习星球」

  • 更多、数据分析、爬虫、前后端开发、人工智能等教程参考.

  • 以上全文,欢迎继续点击阅读原文学习,阅读更多AI资讯,[请点击这里] https://zglg.work/

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值