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

Python3中异常处理:try-finally语句的示例

一. 简介

前面一篇文章简单学习了 try-finally语句结构,执行过程、以及使用场景。文章如下:

Python3中异常处理:try-finally语句-CSDN博客

本文写一些简单的示例来继续学习 try-finally语句的使用。

二. Python3中异常处理:try-finally语句的示例

示例 1:try 块在执行时发生异常后,会立刻停止执行 try块中剩下的代码,转而匹配 except的异常:

#!/usr/bin/env python3def sub_func():try:print("进入try代码块")value = 20 / 0print("这块代码不会执行")finally:print("无论是否发生异常,这块代码都会执行")try:sub_func()
except ZeroDivisionError as err:print(f"{err}: 捕获到 ZeroDivisionError 异常")

运行后结果如下:

可以看出,这是一个嵌套的 try...except语句结构,内部的 try...finally语句块触发了异常,因为内部没有 异常处理 except处理,所以,将该异常抛出到外层的 try...except语句块,打印异常信息。

 示例 2:带 except块(异常处理的),还有 else块的(try块执行无异常时会执行的块):

#!/usr/bin/env python3#假如 test.txt文件已存在
file_name = "test.txt"def sub_func(filename):fd = Nonetry:fd = open(filename, 'r')except FileNotFoundError as err:print("Not found file: error:",err)else:print("open file OK.")finally:print("finally code-blocks")if fd:fd.close()#调用 sub_func()函数
sub_func(file_name)

运行后结果如下:

示例 3:避免在 finally块 中触发异常,否则,在 finally块中引发了新的异常,可能会掩盖之前的异常:

#!/usr/bin/env python3#定义sub_func函数
def sub_func():try:raise ValueError("原始异常")finally:raise RuntimeError("新的异常")#外部try--except块
try:sub_func()
except Exception as err:print(err)

raise ValueError("原始异常"): 手动触发了一个 ValueError类型的异常。并附带一条描述性的错误信息。

except Exception as err :   捕获所有继承自 Exception 类的异常。Exception是 Python中大多数内置异常类的基类,因此,这行代码可以捕获几乎所有常见的异常。

运行后结果如下:

wangtian@wangtian-virtual-machine:~/Code_Learns/python_codes$ ./hello.py 
新的异常

可以看出,在内部 try异常处理代码块中,try 中手动触发了的一个 ValueError 类型的异常,而由于 finally块中触发了一个 RuntimeError类型的异常,最终把 try块的原来的异常覆盖掉了。所以,尽量不要在 finally块中触发异常。

http://www.lryc.cn/news/534822.html

相关文章:

  • Lua限流器的3种写法
  • 基于 GEE 利用插值方法填补缺失影像
  • linux部署ollama+deepseek+dify
  • 在微服务中,如何使用feign在各个微服务中进行远程调用
  • Kafka中的KRaft算法
  • vue3 -- 集成 amap(高德地图)
  • 基于用户的协同过滤算法推荐
  • 4.python+flask+SQLAlchemy+达梦数据库
  • 神经网络常见激活函数 4-LeakyReLU函数
  • PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 thinkphp框架
  • 单例模式详解(Java)
  • 2025年度Python最新整理的免费股票数据API接口
  • 2.10学习总结
  • 原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 从Word里面用VBA调用NVIDIA的免费DeepSeekR1
  • 【SpringBoot篇】基于Redis分布式锁的 误删问题 和 原子性问题
  • 【JVM详解三】垃圾回收机制
  • MySQL的字符集(Character Set)和排序规则(Collation)
  • 2025影视泛目录站群程序设计_源码二次开发新版本无缓存刷新不变实现原理
  • 常用的python库-安装与使用
  • array_walk. array_map. array_filter
  • 数据仓库和商务智能:洞察数据,驱动决策
  • Vue设计模式到底多少种?
  • HTML 属性
  • oracle如何查询历史最大进程数?
  • SpringBoot单机模式,能否支持一万用户请求并发?
  • [前端]CRX持久化
  • 模型 替身决策
  • 【系统架构设计师】体系结构文档化
  • Python Pandas(5):Pandas Excel 文件操作