Python异常处理操作举例详细教程

 更新时间:2025年05月27日 10:47:18   作者:Yant224  
异常处理的能力是一门语言好坏的重要特征,python也提供了强大的异常处理功能,这篇文章主要介绍了Python异常处理操作的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、异常处理基础

1. 基本语法结构

try:
    # 可能引发异常的代码
    result = 10 / 0
except ZeroDivisionError:
    # 处理特定异常
    print("不能除以零!")
except Exception as e:
    # 通用异常处理
    print(f"发生错误: {e}")
else:
    # 无异常时执行
    print("计算成功")
finally:
    # 始终执行的清理代码
    print("清理资源")
  • 异常传播机制

二、常见异常类型

1. 内置异常层次

所有异常类都继承 BaseException

BaseException
 ├── KeyboardInterrupt
 ├── SystemExit
 └── Exception
      ├── ArithmeticError
      │    ├── ZeroDivisionError
      │    └── FloatingPointError
      ├── LookupError
      │    ├── IndexError
      │    └── KeyError
      ├── OSError
      │    ├── FileNotFoundError
      │    └── PermissionError
      └── ValueError

2. 常见异常示例

# 文件操作
try:
    with open("nonexist.txt") as f:
        content = f.read()
except FileNotFoundError:
    print("文件不存在")

# 类型转换
try:
    num = int("abc")
except ValueError:
    print("无效的数字格式")

# 字典操作
d = {"key": "value"}
try:
    print(d["missing"])
except KeyError:
    print("键不存在")

三、多重异常处理

1. 合并捕获

try:
    # 可能抛出多种异常的代码
except (TypeError, ValueError) as e:
    print(f"输入类型错误: {e}")

2. 分层处理

try:
    data = json.loads(invalid_json)
except json.JSONDecodeError:
    print("JSON解析失败")
except Exception:
    print("其他未知错误")

四、finally与else子句

1. finally 应用场景

file = None
try:
    file = open("data.txt", "r")
    process(file)
except IOError:
    print("文件操作错误")
finally:
    if file:
        file.close()  # 确保资源释放

2. else 使用技巧

try:
    result = risky_operation()
except NetworkError:
    handle_error()
else:
    save_result(result)  # 仅在成功时执行

五、自定义异常

1. 创建异常类

class InvalidEmailError(ValueError):
    """自定义邮箱格式异常"""
    def __init__(self, email):
        super().__init__(f"无效邮箱格式: {email}")
        self.email = email

# 使用示例
email = "user@"
if "@" not in email or "." not in email.split("@")[1]:
    raise InvalidEmailError(email)

2. 异常继承体系

class DatabaseError(Exception):
    """数据库操作基类异常"""

class ConnectionError(DatabaseError):
    """数据库连接异常"""

class QueryError(DatabaseError):
    """SQL查询异常"""

六、异常链与上下文

1. raise from 语法

try:
    config = load_config()
except FileNotFoundError as e:
    raise RuntimeError("配置加载失败") from e

2. 异常上下文查看

try:
    # 可能出错的代码
except Exception as e:
    print("原始异常:", e.__cause__)
    print("上下文:", e.__context__)

七、最佳实践与陷阱

✅ 推荐做法

  • 具体异常捕获优先
  • 添加有意义的错误信息
raise ValueError(f"无效参数值: {value}")
  • 日志记录异常
import logging
try:
    process()
except Exception:
    logging.exception("处理失败")

⚠️ 避免陷阱

  • 捕获过于宽泛的异常
try:
    ...
except:  # 捕获所有异常,包括KeyboardInterrupt
    pass
  • 忽略异常
try:
    ...
except Exception:
    pass  # 静默失败
  • 重复抛出异常
try:
    ...
except Exception as e:
    print(e)
    raise  # 保留原始堆栈信息

综合实战案例

网络请求重试机制

import requests
from time import sleep

def fetch_data(url, retries=3):
    for attempt in range(retries):
        try:
            response = requests.get(url, timeout=5)
            response.raise_for_status()
            return response.json()
        except requests.HTTPError as e:
            print(f"HTTP错误: {e}")
        except requests.Timeout:
            print("请求超时")
        except requests.RequestException:
            print("网络连接问题")
        
        if attempt < retries - 1:
            sleep(2 ** attempt)  # 指数退避
    raise Exception(f"请求失败,已重试{retries}次")

# 使用示例
data = fetch_data("https://api.example.com/data")

通过掌握这些异常处理技巧,您可以:

  • 编写更健壮的程序
  • 提高错误诊断效率
  • 创建更友好的用户交互体验
  • 构建可维护的异常处理体系

建议在实际开发中结合具体业务场景,设计合理的异常处理策略,并定期审查异常处理代码的有效性

总结

到此这篇关于Python异常处理操作的文章就介绍到这了,更多相关Python异常处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现socket非阻塞通讯功能示例

    Python实现socket非阻塞通讯功能示例

    这篇文章主要介绍了Python实现socket非阻塞通讯功能,结合实例形式分析了Python使用socket模块进行非阻塞通讯的原理、多线程及客户端、服务器端相关实现技巧,需要的朋友可以参考下
    2019-11-11
  • python常用的正则表达式大全

    python常用的正则表达式大全

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配,下面这篇文章主要给大家介绍了关于python常用正则表达式的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • Python进阶多线程爬取网页项目实战

    Python进阶多线程爬取网页项目实战

    这篇文章主要为大家介绍了Python进阶,Python多线程爬取网页项目实战的示例呈现步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • jupyter notebook远程访问不了的问题解决方法

    jupyter notebook远程访问不了的问题解决方法

    这篇文章主要介绍了jupyter notebook远程访问不了的问题解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Python制作七夕表白案例分享

    Python制作七夕表白案例分享

    这篇文章主要介绍了Python制作七夕表白案例分享,文章利用Python的基本操作实现七夕表白案例,需要的小伙伴可以参考一下
    2022-08-08
  • Python实例解析图像形态学运算技术

    Python实例解析图像形态学运算技术

    形态学处理方法是基于对二进制图像进行处理的,卷积核决定图像处理后的效果。本文将为大家详细介绍一下OpenCV中的图像形态学,感兴趣的可以了解一下
    2022-03-03
  • pycharm中成功运行图片的配置教程

    pycharm中成功运行图片的配置教程

    今天小编就为大家分享一篇pycharm中成功运行图片的配置教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python局部变量与全局变量区别原理解析

    Python局部变量与全局变量区别原理解析

    这篇文章主要介绍了Python局部变量与全局变量区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • python机器学习库xgboost的使用

    python机器学习库xgboost的使用

    这篇文章主要介绍了python机器学习库xgboost的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • django有外键关系的两张表如何相互查找

    django有外键关系的两张表如何相互查找

    这篇文章主要介绍了django有外键关系的两张表如何相互查找,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论