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

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.dtcms.com/a/334515.html

相关文章:

  • Redis知识整理
  • 【论文笔记】STORYWRITER: A Multi-Agent Framework for Long Story Generation
  • 云服务平台主流架构的相关知识体系剖析
  • ABM和强化学习-2015年全国大学生数学建模竞赛B题
  • 安卓11 12系统修改定制化_____修改系统 解锁system分区 去除data加密 自由删减系统应用
  • JetPack系列教程(七):Palette——让你的APP色彩“飞”起来!
  • sql链接的url中serverTimezone的作用
  • 【大模型微调系列-04】 神经网络基础与小项目实战
  • windows环境下使用vscode以及相关插件搭建c/c++的编译,调试环境
  • GIMP:功能强大的跨平台图像处理软件
  • 嵌入式硬件篇---电容本质
  • leetcodehot100 矩阵置零
  • Jenkins安装部署(Win11)和常见配置镜像加速
  • B3837 [GESP202303 二级] 画三角形
  • csrf攻击
  • 11、软件需求工程
  • AMD Ryzen AI Max+ 395四机并联:大语言模型集群推理深度测试
  • 智能二维码刷卡人脸识别梯控控制器硬件规格书​
  • 【C++】高效资源管理四剑客:RVO、NRVO、std::move、RAII 深度解析
  • 【3D重建技术】如何基于遥感图像和DEM等数据进行城市级高精度三维重建?
  • 【Vibe Coding 工程之 StockAnalyzerPro 记录】- EP3.Phase 2股票列表管理功能
  • Font shape `TU/ptm/m/n‘ undefined(Font) using `TU/lmr/m/n‘ instead
  • UE5多人MOBA+GAS 45、制作冲刺技能
  • Business Magic
  • [创业之路-550]:公司半年度经营分析会 - 解决方案汇总
  • 【Java web】Servlet 详解
  • Linux -- 文件【下】
  • MATLAB R2010b系统环境(二)MATLAB环境的准备
  • 基于Transformer的机器翻译——模型篇
  • 力扣面试150(57/100)