Python异常处理从try-except到自定义异常的全过程

 更新时间:2026年03月23日 08:57:04   作者:cartech  
在Python编程中,异常处理是写出健壮代码的关键技能,本文将带你深入了解Python的异常处理机制,从基础的try-except到自定义异常,让你的程序更加稳定和可靠,感兴趣的朋友跟随小编一起看看吧

🛡️ Python异常处理完全指南:从try-except到自定义异常

在Python编程中,异常处理是写出健壮代码的关键技能。本文将带你深入了解Python的异常处理机制,从基础的try-except到自定义异常,让你的程序更加稳定和可靠。

📌 什么是异常?

异常(Exception)是程序执行过程中发生的错误事件,会中断程序的正常流程。Python使用异常对象来表示各种错误情况,如除以零、文件不存在、索引越界等。

🔧 基础语法:try-except

最基本的异常处理结构是try-except语句:

try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以零!")

📋 捕获多种异常

可以捕获多种不同类型的异常:

try:
    number = int(input("请输入一个数字:"))
    result = 100 / number
except ValueError:
    print("输入无效!请输入数字。")
except ZeroDivisionError:
    print("不能除以零!")

🔍 获取异常信息

使用as关键字可以获取异常对象,查看详细信息:

try:
    file = open("不存在的文件.txt", "r")
except FileNotFoundError as e:
    print(f"错误信息:{e}")
    print(f"错误类型:{type(e).__name__}")

⚡ else 和 finally

else块在没有异常时执行,finally块无论是否发生异常都会执行:

try:
    file = open("data.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("文件未找到")
else:
    print(f"文件内容:{content}")
finally:
    print("清理工作完成")
    if 'file' in locals():
        file.close()

🎯 捕获所有异常

使用Exception可以捕获大部分异常(但不建议滥用):

try:
    # 可能出错的代码
    risky_operation()
except Exception as e:
    print(f"发生错误:{e}")
    # 记录日志或进行其他处理

🚀 raise 主动抛出异常

使用raise可以主动抛出异常:

def check_age(age):
    if age < 0:
        raise ValueError("年龄不能为负数")
    if age > 150:
        raise ValueError("年龄不现实")
    return age

try:
    check_age(-5)
except ValueError as e:
    print(f"验证失败:{e}")

🎨 自定义异常

通过继承Exception类创建自定义异常:

class ValidationError(Exception):
    """数据验证错误"""
    pass
class InsufficientFundsError(Exception):
    """余额不足错误"""
    def __init__(self, balance, amount):
        self.balance = balance
        self.amount = amount
        super().__init__(f"余额 {balance} 不足,需要 {amount}")
# 使用自定义异常
class BankAccount:
    def __init__(self, balance=0):
        self.balance = balance
    def withdraw(self, amount):
        if amount > self.balance:
            raise InsufficientFundsError(self.balance, amount)
        self.balance -= amount
        return self.balance
# 测试
account = BankAccount(100)
try:
    account.withdraw(200)
except InsufficientFundsError as e:
    print(f"取款失败:{e}")
    print(f"当前余额:{e.balance}")
    print(f"请求金额:{e.amount}")

🔗 异常链

使用raise from可以在转换异常时保留原始异常信息:

def parse_config(data):
    try:
        return json.loads(data)
    except json.JSONDecodeError as e:
        raise ConfigError("配置文件格式错误") from e
# 这样可以看到完整的异常链

📝 最佳实践

  1. 精确捕获:尽量捕获具体的异常类型,而不是泛泛的Exception
  2. 不要静默处理:空的except块会隐藏问题,至少要记录日志
  3. 使用finally释放资源:或使用上下文管理器(with语句)
  4. 异常信息要清晰:自定义异常时提供有用的错误信息
  5. 不要滥用异常:异常是用于错误处理,不是流程控制

🎁 上下文管理器与异常

with语句自动处理资源释放,即使在异常情况下:

# 不需要手动关闭文件,with会自动处理
with open("data.txt", "r") as file:
    content = file.read()
    # 即使这里发生异常,文件也会被正确关闭

🎯 总结

Python的异常处理机制提供了强大而灵活的错误处理能力:

  • try-except:捕获和处理异常
  • else:无异常时执行的代码
  • finally:无论是否异常都执行的清理代码
  • raise:主动抛出异常
  • 自定义异常:创建特定领域的错误类型

掌握异常处理,让你的Python程序更加健壮和专业!💪

到此这篇关于Python异常处理从try-except到自定义异常的全过程的文章就介绍到这了,更多相关Python try-except到自定义异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux安装python修改默认python版本方法

    linux安装python修改默认python版本方法

    在本文中我们给大家总结了关于linux安装python修改默认python版本的方法和相关知识点,需要的读者们参考下。
    2019-03-03
  • Python map函数()用法

    Python map函数()用法

    map()函数是Python中的一个内置函数,它的功能是将指定的函数,依次作用于可迭代对象的每个元素,并返回一个迭代器对象,这篇文章主要介绍了Python map函数()用法,需要的朋友可以参考下
    2023-07-07
  • Python Django框架实现应用添加logging日志操作示例

    Python Django框架实现应用添加logging日志操作示例

    这篇文章主要介绍了Python Django框架实现应用添加logging日志操作,结合实例形式分析了Django框架中添加Python内建日志模块相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • Python中Tkinter组件Button的具体使用

    Python中Tkinter组件Button的具体使用

    Button=组件用于实现各种各样的按钮,本文主要介绍了Python中Tkinter组件Button的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2022-01-01
  • Python获取脚本所在目录的正确方法

    Python获取脚本所在目录的正确方法

    这篇文章主要介绍了Python获取脚本所在目录的正确方法,需要的朋友可以参考下
    2014-04-04
  • Python+Selenium+Pytesseract实现图片验证码识别

    Python+Selenium+Pytesseract实现图片验证码识别

    这篇文章主要介绍了利用Python+Selenium+Pytesseract实现图片验证码识别,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-01-01
  • 详解Python中datetime库的使用

    详解Python中datetime库的使用

    这篇文章主要介绍了Python中datetime库的使用,它提供了一系列由简单到复杂的时间处理方法。datetime 库可以从系统中获得时间,并以用户选择的格式输出,需要的朋友可以参考下
    2023-04-04
  • 安装pyhttpx解决ImportError: DLL load failed错误

    安装pyhttpx解决ImportError: DLL load failed错误

    这篇文章主要为大家介绍了安装pyhttpx解决ImportError: DLL load failed错误,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Python函数参数定义及传递方式解析

    Python函数参数定义及传递方式解析

    这篇文章主要介绍了Python函数参数定义及传递方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • django使用图片延时加载引起后台404错误

    django使用图片延时加载引起后台404错误

    本文给大家介绍的是作者在Django中使用图片的延时加载技术后引起后台404错误的问题以及解决思路和方法,有需要的小伙伴可以参考下
    2017-04-04

最新评论