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

python中的异常处理try-except - else - finally与自定义异常处理

为什么要处理异常?

如果异常没有被合理的处理,就会导致程序不正常运行,与我们期待的结果不相符,例如下面这个例子(除数不能为0的案例)

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):return x / yprint(division(2,3))
print(division(2,0))
print(division(2,1))

执行结果
在这里插入图片描述

异常处理正确流程try-except - else - finally

python的关键字finally功能是和try配合使用,在try之后可以有except或者else,finally关键词必须放在except和else之后,不论是否有异常发生一定会执行finally当中的逻辑。
例如:一定除数不能为0的try-except-else的处理逻辑

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v = x / yexcept ZeroDivisionError as e:print(e)return ("除数不能为0")else:return vprint(division(2,3))
print(division(2,0))
print(division(2,1))

执行结果如下
在这里插入图片描述
当然,实际代码中有N中可能出现的错误异常,因此在excepte中还可能回处理其他异常,例如数据类型错误,例如

print(division('s',1))

执行结果为typeError
在这里插入图片描述
所以可能也需要处理不止一个异常

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v = x / yexcept ZeroDivisionError as e:print(e)return ("除数不能为0")except TypeError as e:print(e)return ("数据类型异常,需要整型")else:return vprint(division(2,0))
print(division('s',1))
print(division(2,1))

在这里插入图片描述
除了这种可以预料的处理,我们还需要兜底处理逻辑,来保证其他异常被处理掉,所以需要用baseException来多兜底

    except BaseException as e:print(e)return ("发生了异常")

除此之外,如果有数据库相关资源需要关闭,文件资源需要处理都可以在finally中进行处理,因为finally中逻辑无论是否发生异常都可以保证被执行

# 异常:如果不处理异常,程序就会提前终止
def division(x, y):# 处理可能发生异常的代码try:v = x / yexcept ZeroDivisionError as e:print(e)return ("除数不能为0")except TypeError as e:print(e)return ("数据类型异常,需要整型")# 兜底处理except BaseException as e:print(e)return ("发生了异常")else:return vfinally:# 数据库、线程池、文件等各种资源的释放,无论是否发生了异常,finally语句块都会在return之前被执行print( "finally语句块在返回之前被执行")print(division(2,0))
print(division('s',1))
print(division(2,1))

执行结果如下
在这里插入图片描述

自定义异常的抛出

举个例子:检测考试是否通过的异常,60分以上为通过

# 自定义异常
class scoreException(BaseException):# 构造方法def __init__(self, msg):super().__init__(msg)# 自定义函数
def checkScore(score):if score < 60:raise scoreException("Score is too low!")else:print("Score is ok!")# test方法
try:score = int(input("Enter a score number: "))checkScore(score)
except scoreException as e:print(e)print("continue other logic")

执行结果1
在这里插入图片描述
执行结果2
在这里插入图片描述

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

相关文章:

  • R语言文本探索与预处理:入门指南
  • PH热榜 | 2025-06-14
  • C++开源协程库async_simple有栈协程源码分析
  • SQL Server 窗口函数详解:窗口行数控制的原理、关键字与应用场景
  • 计算机网络-自顶向下—第五章数据链路层重点复习笔记
  • Thread的join方法
  • python+django/flask+uniapp宠物中心信息管理系统app
  • Java开发中避免NullPointerException的全面指南
  • 【三维重建】无位姿图像的大场景On-the-fly重建
  • 【Linux】初见,进程概念
  • 创客匠人解析:美团护城河战略对 IP 可持续变现的启示
  • TCP 协议
  • 2025年EAAI SCI1区TOP,贪婪策略粒子群算法GS-IPSO+无人机桥梁巡检覆盖路径规划,深度解析+性能实测
  • 函数式编程 stream流 lambda表达式
  • event.target 详解:理解事件目标对象
  • 学习昇腾开发的第二天--PC机远程登录开发板
  • 大IPD之——华为的管理变革与战略转型之道(三)
  • 05-Linux软件安装与前后端项目部署
  • adoc(asciidoc)转为markdown的方法,把.adoc文件转换为markdown格式
  • PostgreSQL的扩展pg_visibility
  • 【办公类-25-05】20250514 Python模拟UIBOT上传园园通截图(自动最小化界面,时间部分的删除和黏贴)
  • 【CSS-13】CSS 网页布局三大机制详解:普通流、浮动与定位
  • 2.2 订阅话题
  • aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(三)
  • 开源统一数据库管理平台完全指南:私有化部署方案与技术解析
  • 解决Spark4.0.0依赖问题
  • http的缓存问题
  • pytorch 实战二 CNN手写数字识别
  • Spring MVC 中日期格式转换的两种实用方法
  • Hive 性能优化:从表设计到查询执行的全链路优化