qidao123.com技术社区-IT企服评测·应用市场

标题: 【Python 异常处置惩罚】 [打印本页]

作者: 花瓣小跑    时间: 5 天前
标题: 【Python 异常处置惩罚】
Python 的异常处置惩罚机制是构建结实步调的核心工具,通过 try-except 结构实现优雅的错误管理。以下是系统化指南:

一、基础异常处置惩罚结构

  1. try:
  2.     # 可能出错的代码
  3.     result = 10 / 0
  4. except ZeroDivisionError:
  5.     # 异常处理逻辑
  6.     print("错误:除数不能为零!")
复制代码

二、异常处置惩罚进阶用法

1. 捕捉多个异常类型

  1. try:
  2.     # 可能引发多种异常的代码
  3.     with open("data.txt") as f:
  4.         data = f.read()
  5. except (FileNotFoundError, UnicodeDecodeError) as e:
  6.     print(f"文件处理失败: {str(e)}")
复制代码
2. 获取异常对象信息

  1. try:
  2.     1 / 0
  3. except ZeroDivisionError as e:
  4.     print(f"错误类型: {type(e).__name__}")  # 输出: ZeroDivisionError
  5.     print(f"错误信息: {e}")                # 输出: division by zero
  6.     print(f"错误轨迹: {e.__traceback__}")   # 详细堆栈跟踪
复制代码
3. else 子句(无异常时执行)

  1. try:
  2.     num = int(input("输入数字: "))
  3. except ValueError:
  4.     print("输入无效!")
  5. else:
  6.     print(f"平方值: {num**2}")  # 仅当无异常时执行
复制代码
4. finally 块(始终执行)

  1. file = None
  2. try:
  3.     file = open("data.txt", "r")
  4.     process(file)
  5. except FileNotFoundError:
  6.     print("文件不存在")
  7. finally:
  8.     if file:
  9.         file.close()  # 确保资源释放
  10.     print("操作结束")
复制代码

三、高级异常处置惩罚本事

1. 自定义异常类型

  1. class AuthenticationError(Exception):
  2.     """自定义认证异常"""
  3.     def __init__(self, message="认证失败"):
  4.         self.message = message
  5.         super().__init__(self.message)
  6. # 使用示例
  7. def login(username, password):
  8.     if not validate_credentials(username, password):
  9.         raise AuthenticationError("用户名或密码错误")
复制代码
2. 异常链(Python 3+)

  1. try:
  2.     process_data()
  3. except DataError as e:
  4.     raise DatabaseError("数据存储失败") from e  # 保留原始异常
复制代码
3. 上下文管理器集成

  1. from contextlib import contextmanager
  2. @contextmanager
  3. def safe_open(path, mode):
  4.     file = None
  5.     try:
  6.         file = open(path, mode)
  7.         yield file
  8.     except Exception as e:
  9.         print(f"文件操作失败: {e}")
  10.         raise
  11.     finally:
  12.         if file:
  13.             file.close()
  14. # 使用示例
  15. with safe_open("data.txt", "r") as f:
  16.     print(f.read())
复制代码

四、最佳实践原则


五、常见错误模式

1. 空 except 块

  1. try:
  2.     risky_code()
  3. except:  # 危险!会捕获所有异常
  4.     pass
复制代码
2. 过度捕捉

  1. try:
  2.     parse_data(user_input)
  3. except Exception:  # 掩盖潜在编程错误
  4.     return default_value
复制代码
3. 异常信息丢失

  1. try:
  2.     1 / 0
  3. except ZeroDivisionError:
  4.     raise RuntimeError("计算失败")  # 丢失原始异常信息
复制代码

六、调试本事


通过公道运用异常处置惩罚机制,可以显著提拔代码结实性。建议联合单元测试框架(如 pytest)验证异常处置惩罚逻辑,确保关键路径的容错能力。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4