Python的异常处理

异常处理是编程中非常重要的一部分,它允许程序在出现错误或异常情况时采取适当的措施,以避免程序崩溃或提供更好的用户体验。在Python中,异常处理通过try、except、else和finally语句来实现。

异常处理语句

  1. try :这是异常处理的开始。在try块中的代码是可能会引发异常的代码。

  2. except :如果在try块中抛出了异常,控制流将转到except块。except块用于捕获并处理特定类型的异常。可以有多个except块来捕获不同类型的异常。

  3. else :else块在try块没有异常发生时执行。它是一个可选部分。

  4. finally :finally块总是在try块执行完毕后执行,无论是否发生异常。finally块通常用于执行清理工作,如关闭文件或释放资源。

try-except语句:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 0  # 引发ZeroDivisionError异常
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
  • try块中包含可能会引发异常的代码。
  • 如果try块中的代码引发了指定类型的异常,程序将跳转到相应的except块进行处理。
  • 如果try块中的代码未引发异常,则跳过相应的except块。
  • 可以在一个try语句中包含多个except块,以处理不同类型的异常。

else语句:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 2
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
else:
    # 没有发生异常时执行的代码块
    print("计算结果:", result)
  • else块中的代码只在try块中的代码未引发异常时执行。

finally语句:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 2
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
else:
    # 没有发生异常时执行的代码块
    print("计算结果:", result)
finally:
    # 无论是否发生异常都会执行的代码块
    print("执行完毕")
  • finally块中的代码无论是否发生异常都会执行,通常用于释放资源或清理操作。

异常类型捕获:

python 复制代码
try:
    # 可能引发异常的代码块
    result = 10 / 0
except ZeroDivisionError:
    # 异常处理代码块
    print("除零错误发生")
except ArithmeticError:
    # 捕获除零错误以外的算术错误
    print("算术错误发生")
except Exception as e:
    # 捕获其他类型的异常,并将异常对象存储在变量e中
    print("发生异常:", e)
  • 可以使用多个except块来捕获不同类型的异常,将最具体的异常放在前面,最一般的异常放在后面。
  • 可以使用as关键字将捕获的异常对象存储在变量中,以便后续处理。

捕获多个异常

python 复制代码
try:
    # 可能会引发多种异常的代码
    some_risky_operation()
except (TypeError, ValueError) as e:
    # 同时捕获多个类型的异常
    print("Caught an exception:", e)

抛出异常:

python 复制代码
def divide(x, y):
    if y == 0:
        raise ZeroDivisionError("除数不能为零")
    return x / y

try:
    result = divide(10, 0)
except ZeroDivisionError as e:
    print("发生异常:", e)
  • 可以使用raise语句手动抛出异常,提供异常类型和异常消息。

自定义异常:

python 复制代码
class MyError(Exception):
    def __init__(self, message):
        self.message = message

try:
    raise MyError("自定义异常")
except MyError as e:
    print("发生自定义异常:", e.message)
  • 可以通过继承Exception类来自定义异常。

自定义嵌套异常:

python 复制代码
def zer() -> int:
    try:
        1 / 0
    except:
        raise MyCustomError("Custom error message")
        
'''调用example()后输出:Caught a custom exception: Custom error message'''
def example():
    try:
        zer()
    except MyCustomError as e:
        print("Caught a custom exception:", e)

总结

异常处理是Python编程中的一个重要部分,它提供了一种结构化的错误管理方式。通过使用try、except、else和finally语句,可以编写更健壮、更易于维护的代码。理解异常处理的工作原理和如何使用它们可以帮助在程序中更有效地处理错误和异常情况。

相关推荐
沐晓时光7 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
用户9562562542911 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
威哥爱编程11 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程11 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_9679801111 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读11 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*12 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer
David猪大卫13 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
卷无止境14 小时前
mathmodel-figure-templates 以及两个上手案例
后端·python
fengci.14 小时前
CTF2MISC中等部分
开发语言·前端·学习