Day 6:异常处理与文件操作
一、异常处理概述
在编程过程中,错误是不可避免的。Python提供了异常处理机制,允许程序在遇到错误时进行处理,而不是直接崩溃。使用异常处理可以提高程序的可靠性和稳定性。
关键术语:
术语 | 描述 |
---|---|
异常 | 在程序运行过程中发生的事件,打断正常流程。 |
捕获 | 使用try...except 语句捕获并处理异常。 |
抛出 | 使用raise 语句手动抛出异常。 |
finally | 无论是否发生异常,finally 块中的代码都会执行。 |
二、基本异常处理
使用try
和except
语句捕获异常。
示例代码:
try:
x = 5 / 0 # 除以零错误
except ZeroDivisionError as e:
print(f"发生错误: {e}") # 输出: 发生错误: division by zero
代码流程图:
+-------------------+
| 开始 |
+-------------------+
|
v
+-------------------+
| try块 |
| 代码 |
+-------------------+
|
v
+-------------------+
| 错误检测 |
+-------------------+
| |
错误发生 没有错误
| |
v v
+-------------------+
| except块 | ---> 程序正常工作
+-------------------+
三、捕获多种异常
可以使用多个except
块捕获不同类型的异常。
示例代码:
try:
number = int(input("请输入一个整数: "))
result = 100 / number
except ValueError:
print("输入无效,请输入一个整数。")
except ZeroDivisionError:
print("错误: 不能除以零。")
except Exception as e:
print(f"发生了一个错误: {e}")
表格:常见异常及其描述
异常类型 | 描述 |
---|---|
ValueError | 输入类型不符合预期 |
ZeroDivisionError | 试图将数值除以零 |
FileNotFoundError | 指定的文件不存在 |
IndexError | 访问序列的索引超出范围 |
四、使用finally
和else
finally
块中的代码无论异常是否发生都会执行。else
块用于在try
块没有发生异常时执行的代码。
示例代码:
try:
x = 5 / 2
except ZeroDivisionError:
print("不能除以零")
else:
print(f"计算结果: {x}") # 输出: 计算结果: 2.5
finally:
print("这段代码总是会执行。")
代码执行流程:
- 执行
try
块。 - 如果无异常,执行
else
块。 - 无论如何,执行
finally
块。
五、自定义异常
可以通过继承Exception
类来创建自定义异常。
示例代码:
class MyCustomError(Exception):
pass
def test_exception(value):
if value < 0:
raise MyCustomError("负值错误:值必须为非负数")
try:
test_exception(-1)
except MyCustomError as e:
print(f"发生自定义异常: {e}")
六、文件操作
Python提供了内置函数用于文件操作,主要分为以下几步:
- 打开文件。
- 读/写文件。
- 关闭文件。
1. 打开文件
使用open()
函数打开文件。
file = open("example.txt", "w") # 以写模式打开文件
模式说明表格:
模式 | 描述 |
---|---|
“r” | 只读模式 |
“w” | 只写模式(覆盖文件) |
“a” | 追加模式(在文件末尾写入) |
“b” | 二进制模式 |
“t” | 文本模式(默认模式) |
2. 读写文件
写入文件示例
with open("example.txt", "w") as file:
file.write("Hello, world!\n")
file.write("这是一个文件操作的示例。")
读取文件示例
with open("example.txt", "r") as file:
contents = file.read()
print(contents)
3. 关闭文件
在使用with
语句时,文件会自动关闭,不需要显式调用close()
。
不使用with
时关闭文件:
file = open("example.txt", "r")
try:
contents = file.read()
finally:
file.close() # 确保文件被关闭
七、异常处理与文件操作结合
在文件操作中可能会出现多种异常,使用异常处理可以确保文件操作的安全性。
示例代码:
try:
with open("nonexistent.txt", "r") as file:
contents = file.read()
except FileNotFoundError:
print("错误: 文件未找到。")
except Exception as e:
print(f"发生错误: {e}")
相关表格:文件操作可能的异常
异常类型 | 描述 |
---|---|
FileNotFoundError | 指定的文件不存在 |
IsADirectoryError | 期望文件但提供了目录 |
IOError | 读取或写入文件时发生的输入输出错误 |
八、项目作业
为了巩固所学知识,请完成以下项目:
-
项目描述:
创建一个简单的记账应用程序,能够记录用户的收入和支出,包括如下功能:- 添加收入
- 添加支出
- 查看所有记录
- 保存记录到文件
-
要求:
- 使用异常处理捕获可能的错误(例如:文件未找到、输入无效等)。
- 文件存储格式可选择JSON或简单文本。
-
示例思路:
- 使用
Income
和Expense
类分别记录收入和支出,包含属性如amount
和description
。 - 主程序中使用
with open()
打开文件,读取和写入记录。 - 异常处理确保程序稳健性。
- 使用
结语
通过本章学习,您应当掌握了异常处理与文件操作的基础,包括如何捕获异常、使用不同模式打开和操作文件,以及如何将两者结合在实际应用中。在实际开发中,良好的异常处理和文件管理是创建稳定应用程序的重要组成部分。
怎么样今天的内容还满意吗?再次感谢观众老爷的观看。
最后,祝您早日实现财务自由,还请给个赞,谢谢!