💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在优快云上与你们相遇~💖

本博客的精华专栏:
【自动化测试】 【测试经验】 【人工智能】 【Python】
Python3 系列
基础
进阶

Python3 异常和文件操作全解析 📄🔥
本文将系统讲解 Python3 中的异常处理机制与文件操作方法,配合代码实例,让你轻松掌握这一关键基础知识点。无论是编写健壮程序,还是进行数据处理,都是绕不开的重要环节!

什么是异常
程序运行期间发生的错误称为异常(Exception)。当Python脚本遇到无法正常处理的情况时,会抛出异常对象。
常见异常类型
| 异常类型 | 描述 |
|---|---|
FileNotFoundError |
文件未找到错误 |
TypeError |
类型不匹配错误 |
ValueError |
值错误 |
ZeroDivisionError |
除以零错误 |
# 触发ValueError的示例
try:
int('abc')
except ValueError as e:
print(f"捕获到异常:{
e}")
异常处理的方法
Python 使用 try...except 结构来处理异常,以避免程序崩溃。
基本语法:
try:
# 有可能抛出异常的代码
result = 10 / 0
except ZeroDivisionError:
print("除数不能为零!")
捕获多个异常:
try:
num = int(input("请输入一个整数:"))
result = 10 / num
except ZeroDivisionError:
print("除数不能为零")
except ValueError:
print("输入的不是有效整数")
使用 as 关键字获取异常信息:
try:
f = open("nofile.txt")
except FileNotFoundError as e:
print("错误信息:", e)
异常中的 finally 语句
在 Python 的异常处理机制中,finally语句是一个非常重要的组成部分。finally语句的作用是无论try块中的代码是否发生异常,也无论异常是否被except块捕获,finally块中的代码都会被执行。这使得finally语句特别适用于需要执行清理操作的场景,比如关闭文件、释放锁或网络连接等。
try - finally语句的基本语法结构如下:
try:
# 可能会引发异常的代码
pass
finally:
# 无论是否发生异常,都会执行的代码
pass
try - finally语句结构的执行过程如下:
1. 执行 try 块代码:首先执行try块内的逻辑。
2. 检查异常:
- 无异常:若
try块执行后无异常,则跳过except块(如果有except块的话),直接执行finally。 - 有异常:若
try块执行中发生异常,Python 会立刻暂停当前流程(try块中剩下未运行的代码),转而去执行finally块。
3.执行 finally 块:finally块的代码必定运行,无论try块代码是否发生异常,或是否有return、break、continue等等控制流语句。
示例 1:文件操作中的资源清理
在文件操作中,我们打开文件后,无论读取或写入过程是否发生异常,都需要关闭文件以释放资源。这时finally语句就非常有用。
fd = open("test.txt", 'r')
try:
content = fd.read()
print(content)
finally:
fd.close()
在上述代码中,try块尝试读取文件内容。如果在读取过程中发生异常,比如文件损坏无法读取,程序会立即跳转到finally块中关闭文件。如果读取过程没有异常,同样会执行finally块中的关闭文件操作,确保文件资源被正确释放。
示例 2:覆盖返回值或覆盖异常
如果finally代码块中有return或抛出新的异常,则会覆盖try或except块中的结果。因此,在finally块中应尽量避免引发异常,除非有充分的理由这么做。
def sub_func():
try:
return "from try code-blocks"
finally:
return "from finally code-blocks"
# 调用函数sub_func()
info = sub_func()
print(info)
运行上述代码,输出结果为from finally code-blocks。这是因为finally块中的return语句覆盖了try块中的return语句。
示例 3:异常未捕获时的情况
如果在try块中发生了异常并且该异常未被捕获(即没有except异常处理块的代码),则运行了finally块的代码后才抛出异常。
try:
value1 = 20 / 0 # 发生异常后,try代码块后续代码不会执行
value2 = 10 * 1
print("try code-blocks executed.")
finally:
print("finally code-blocks executed.")
运行上述代码,首先会执行try块中的20 / 0引发ZeroDivisionError异常,此时try块中后续的value2 = 10 * 1和print("try code-blocks executed.")不会执行,而是直接跳转到finally块中执行print("finally code-blocks executed."),然后再抛出ZeroDivisionError异常。
异常是怎么引发的
异常的引发通常是由于程序在运行过程中遇到了无法正常处理的情况,主要可以分为代码逻辑错误和外部因素这两大原因。下面我们详细分析异常是如何引发的,并结合具体例子进行说明。
代码逻辑错误
1. 条件判断错误:在编写程序时,如果条件判断的逻辑不正确,可能会导致程序执行到不期望的分支,从而引发异常。例如:
num = 10
if num >

最低0.47元/天 解锁文章
3101

被折叠的 条评论
为什么被折叠?



