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

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

一. 简介

在 Python中,异常处理是一种对程序运行时异常的处理机制,通过捕获并处理程序运行过程中可能出现的错误,从而避免程序崩溃。

Python 提供了 try,except,else和 finally关键字来处理异常。本文来学习一下  try...finally 语句结构。

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

try...finally 语句是 Python中用于确保,某些代码无论是否发生异常都会被执行的一种结构。这种结构特别适用于需要执行清理操作的场景,比如,关闭文件,释放锁或网络连接等。

try...finally 语句结构如下:

#!/usr/bin/env python3

try:
    #要执行的代码块
except ExceptionType1 as err:
    #触发 ExceptionType1异常时,要执行的代码块
else:
    #没有异常发生时,要执行的代码块
finally:
    #无论是否发生异常,都会执行的代码块

try...finally 语句结构的执行过程:

1.  执行 try块

代码首先执行 try块内的逻辑。

2. 检查异常

无异常:若 try块执行后无异常,则跳过 except 块,直接执行 finally。

有异常:若 try块执行中发生异常,Python会立刻暂停当前流程(try 块中剩下未运行的代码),转而去执行 finally块。

3. 执行 finally块

finally块的代码必定运行,无论try 块代码是否发生异常,或是否有 return 、break、continue等等控制流语句。

三. 示例

示例 1:释放资源的功能

#!/usr/bin/env python3

fd = open("test.txt", 'r')
try:
    fd.read()
#finally块用于关闭文件
finally:
    fd.close()

示例 2:覆盖返回值或覆盖异常

如果 finally 代码块中有 return或 新的异常,则会覆盖 try 或 except块中结果。因此,在 finally块中应尽量避免引发异常,除非有理由要这么做。

示例如下:

#!/usr/bin/env python3

def sub_func():
    try:
        return "from try code-blocks"
    finally:
        return "from finally code-blocks"

#调用函数 sub_func()
info = sub_func()
print(info)

运行后结果如下:

示例 3:如果在 try块中发生了异常并且该异常未被捕获(即没有 except异常处理块的代码),则运行了 finally块的代码后才抛出异常。如下所示:

#!/usr/bin/env python3

try:
    value1 = 20/0
    #发生异常后,try代码块后续代码不会执行
    value2 = 10*1
    print("try code-blocks executed.")

finally:
    print("finally code-blocks executed.")

运行后结果如下:


下一篇文章写一些示例,继续学习一下 try...finally语句的使用。


http://www.kler.cn/a/536405.html

相关文章:

  • 网工_以太网MAC层
  • 作为高级测试工程师,如何用AI进行进一步提升?DeepSpeek的回答
  • postgresql 函数错误捕捉
  • 【多线程】线程池核心数到底如何配置?
  • 日期选择控件,时间跨度最大一年。
  • 通过docker安装部署deepseek以及python实现
  • Oracle CDB自动处理表空间不足脚本
  • Hackmyvm Atom
  • 【吾爱出品】 [Windows] 多线程下载器,Ghost Downloader v3.5.1
  • UnityShader学习笔记——动态效果
  • ubuntu20.04离线安装docker和docker-compose
  • 基于CLIP视觉语言大模型的行人重识别方法的简单框架设计
  • 【AI大模型】deepseek 相关资料和使用 【媲美 GPT-o1?】
  • 02.07 TCP服务器与客户端的搭建
  • 建筑兔零基础自学python记录13|实战人脸识别项目——灰度转换02
  • C/C++ 面试智能指针
  • C++ 中的环形线性动态规划
  • 攻防世界baigeiRSA
  • 【补充】RustDesk一键部署及账号登录配置
  • 深入理解Python上下文管理器:从基础到高级应用
  • java版本
  • 8.stack和queue
  • Linux交叉编译gpsd移植至arm板
  • CI/CD相关概念
  • AWS 上的 Red Hat OpenShift 服务
  • uniapp 使用 tree.js 解决模型加载不出来的问题