当前位置: 首页 > ds >正文

python---异常处理

文章目录

  • 基本语法
  • 常见内置异常
  • 抛出异常
  • 自定义异常
  • 最佳实践

异常处理是Python中处理程序运行时错误的重要机制。

基本语法

从一个except分支跳出后,就不会再走其他的分支。
如果没有错误就会走else分支。
如果发生错误但是没有捕获到,则会报错。
示例代码1:

try:# 可能引发异常的代码result = 10 / 0
except ZeroDivisionError:# 处理特定异常print("不能除以零!")
except (TypeError, ValueError) as e:# 处理多种异常print(f"类型或值错误: {e}")
except Exception as e:# 处理所有其他异常print(f"发生了未知错误: {e}")
else:# 如果没有异常发生,执行这里的代码print("一切正常!")
finally:# 无论是否发生异常,都会执行print("清理工作完成")

输出结果1:

不能除以零!
清理工作完成

示例代码2:

print("基本语法")
try:# 可能引发异常的代码result = 10 / 0
except (TypeError, ValueError) as e:# 处理多种异常print(f"类型或值错误: {e}")
except Exception as e:# 处理所有其他异常print(f"发生了未知错误: {e}")
else:# 如果没有异常发生,执行这里的代码print("一切正常!")
finally:# 无论是否发生异常,都会执行print("清理工作完成")

输出结果2:

发生了未知错误: division by zero
清理工作完成

示例代码3:

print("基本语法")
try:# 可能引发异常的代码result = 10 / 1
except ZeroDivisionError:# 处理特定异常print("不能除以零!")
except (TypeError, ValueError) as e:# 处理多种异常print(f"类型或值错误: {e}")
except Exception as e:# 处理所有其他异常print(f"发生了未知错误: {e}")
else:# 如果没有异常发生,执行这里的代码print("一切正常!")
finally:# 无论是否发生异常,都会执行print("清理工作完成")

输出结果3:

一切正常!
清理工作完成

示例代码4:

try:# 可能引发异常的代码result = 10 / 0
except (TypeError, ValueError) as e:# 处理多种异常print(f"类型或值错误: {e}")
else:# 如果没有异常发生,执行这里的代码print("一切正常!")
finally:# 无论是否发生异常,都会执行print("清理工作完成")

输出示例4:

清理工作完成
Traceback (most recent call last):File "D:\PythonProject\learn_250816\except.py", line 4, in <module>result = 10 / 0~~~^~~
ZeroDivisionError: division by zero

常见内置异常

Exception: 所有内置异常的基类

ArithmeticError: 所有算术错误的基类

ZeroDivisionError: 除数为零

AttributeError: 属性引用或赋值失败

ImportError: 导入模块/对象失败

IndexError: 序列下标超出范围

KeyError: 字典中不存在的键

KeyboardInterrupt: 用户中断执行(通常是Ctrl+C)

NameError: 未声明/初始化对象

SyntaxError: Python语法错误

TypeError: 对类型无效的操作

ValueError: 传入无效参数

FileNotFoundError: 请求的文件或目录不存在

OSError: 操作系统相关的错误

抛出异常

使用raise语句主动抛出异常。
示例代码1:

def validate_age(age):if age < 0:raise ValueError("年龄不能为负数")elif age < 18:raise ValueError("未成年人禁止访问")else:print("欢迎访问")try:validate_age(17)
except ValueError as e:print(e)

输出结果1:

未成年人禁止访问

示例代码2:

def validate_age(age):if age < 0:raise ValueError("年龄不能为负数")elif age < 18:raise ValueError("未成年人禁止访问")else:print("欢迎访问")try:validate_age(19)
except ValueError as e:print(e)

输出结果2:

欢迎访问

示例代码3:

def validate_age(age):if age < 0:raise ValueError("年龄不能为负数")elif age < 18:raise ValueError("未成年人禁止访问")else:print("欢迎访问")try:validate_age(-5)
except ValueError as e:print(e)

输出结果3:

年龄不能为负数

示例代码4:
不适用try的话,程序无法继续运行。

def validate_age(age):if age < 0:raise ValueError("年龄不能为负数")elif age < 18:raise ValueError("未成年人禁止访问")else:print("欢迎访问")validate_age(0)

输出结果4:

Traceback (most recent call last):File "D:\PythonProject\learn_250816\except.py", line 31, in <module>validate_age(0)File "D:\PythonProject\learn_250816\except.py", line 27, in validate_ageraise ValueError("未成年人禁止访问")
ValueError: 未成年人禁止访问

自定义异常

可以创建自己的异常类:

class MyCustomError(Exception):"""自定义异常类"""def __init__(self, message):self.message = messagesuper().__init__(self.message)try:raise MyCustomError("这是自定义错误")
except MyCustomError as e:print(f"捕获到自定义异常: {e}")

最佳实践

1、尽量捕获特定异常,而不是通用的Exception

2、在异常处理中包含足够的信息以便调试

3、避免空的except块

4、使用finally进行资源清理

5、自定义异常应继承自Exception类或其子类

6、考虑使用上下文管理器(with语句)处理资源

http://www.xdnf.cn/news/18113.html

相关文章:

  • 微软Wasm学习-创建一个最简单的c#WebAssembly测试工程
  • ISIS区域内、区域间计算
  • 机器学习——CountVectorizer将文本集合转换为 基于词频的特征矩阵
  • Boost搜索引擎项目(详细思路版)
  • 【3D重建技术】如何基于遥感图像和DEM等数据进行城市级高精度三维重建?
  • 扫地机器人(2025蓝桥杯省A组 H题)
  • AI重构文化基因:从“工具革命”到“生态觉醒”的裂变之路
  • 线性代数之两个宇宙文明关于距离的对话
  • 完整的VOC格式数据增强脚本
  • 狗品种识别数据集:1k+图像,6个类别,yolo标注完整
  • .net印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统
  • 曲面/线 拟合gnuplot
  • 第四章:大模型(LLM)】06.langchain原理-(5)LangChain Prompt 用法
  • 第七十五章:AI的“思维操控师”:Prompt变动对潜在空间(Latent Space)的影响可视化——看懂AI的“微言大义”!
  • P2169 正则表达式
  • LeetCode 刷题【43. 字符串相乘】
  • 视觉语言模型(VLA)分类方法体系
  • Kotlin-基础语法练习一
  • 代码随想录算法训练营四十三天|图论part01
  • Ubuntu 25.04 安装并使用 MySQL 8.4.5 的步骤
  • MySQL完整重置密码流程(针对 macOS)
  • AI应用安全 - Prompt注入攻击
  • 深入解析Java代理模式:灵活控制对象访问的核心技术
  • 配置国内加速源后仍然无法拉取镜像
  • STC8单片机驱动I2C屏幕:实现时间、日期与温湿度显示
  • Rust 中 i32 与 *i32 的深度解析
  • 解决zabbix图片中文乱码
  • 46.Sentinel规则持久化
  • 8位量化简介(40)
  • 铨林接纸机学习记录1