Python的异常处理

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

异常处理语句

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

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

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

  4. finallyfinally块总是在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语句,可以编写更健壮、更易于维护的代码。理解异常处理的工作原理和如何使用它们可以帮助在程序中更有效地处理错误和异常情况。

相关推荐
顾林海2 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱5 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽10 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码10 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱19 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵21 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate