第5章:文件与异常处理
在编程中,文件操作和异常处理是必不可少的部分。Python提供了强大的文件操作功能,并且能够方便地处理运行时错误。掌握这两部分可以让你编写更加健壮和高效的代码。
5.1 文件操作
5.1.1 打开文件
Python提供了内置的open()
函数用于打开文件,返回一个文件对象。
python"># 打开文件
file = open('example.txt', 'r') # 'r'表示读取模式
print(file.read()) # 读取文件内容
file.close() # 关闭文件
5.1.2 文件模式
模式 | 描述 |
---|---|
'r' | 只读模式(默认模式) |
'w' | 写入模式(如果文件存在会被覆盖) |
'a' | 追加模式(在文件末尾追加内容) |
'b' | 二进制模式(用于处理非文本文件) |
'x' | 创建模式(文件不存在时创建文件) |
't' | 文本模式(默认模式) |
python"># 示例:写入文件
file = open('example.txt', 'w') # 打开文件以写入
file.write("Hello, Python!") # 写入内容
file.close()
5.1.3 文件读取方法
read(size)
:读取指定大小的字符。readline()
:读取一行内容。readlines()
:读取所有行并返回一个列表。
python"># 读取文件
file = open('example.txt', 'r')
print(file.read()) # 读取所有内容
file.close()# 逐行读取
file = open('example.txt', 'r')
print(file.readline()) # 读取一行
file.close()
5.2 上下文管理器与with
语句
使用with
语句可以自动管理文件的打开和关闭,避免忘记关闭文件导致资源泄漏。
python"># 使用with自动关闭文件
with open('example.txt', 'r') as file:content = file.read()print(content)
# 不需要显式调用file.close()
with
语句可以确保无论代码执行是否成功,都会自动关闭文件。
5.3 文件操作的常见方法
5.3.1 os模块中的文件操作
os
模块提供了与操作系统相关的功能,可以用来处理文件和目录。
python">import os# 获取当前工作目录
print(os.getcwd()) # 获取当前目录# 创建目录
os.mkdir('new_folder')# 删除文件
os.remove('example.txt')
5.3.2 Pathlib模块
pathlib
模块提供了面向对象的文件系统路径操作方式。
python">from pathlib import Path# 创建路径对象
path = Path('example.txt')# 判断文件是否存在
if path.exists():print("文件存在")
else:print("文件不存在")# 读取文件内容
content = path.read_text()
print(content)
5.4 异常处理
5.4.1 什么是异常
异常是程序执行过程中遇到的错误。Python通过try-except
语句来处理异常。
python">try:x = 1 / 0 # 除以零会引发异常
except ZeroDivisionError as e:print(f"发生异常:{e}")
5.4.2 异常处理流程
try
:尝试执行可能引发异常的代码。except
:捕获异常并进行处理。else
:如果没有异常发生,执行此部分代码。finally
:无论是否发生异常,都会执行此部分代码(通常用于清理操作)。
python">try:x = int(input("请输入一个整数:"))print(10 / x)
except ZeroDivisionError:print("不能除以零")
except ValueError:print("请输入有效的整数")
else:print("没有异常发生")
finally:print("无论如何都会执行的部分")
5.4.3 多个异常捕获
可以捕获多个不同类型的异常。
python">try:x = int(input("请输入一个整数:"))result = 10 / x
except (ZeroDivisionError, ValueError) as e:print(f"发生异常:{e}")
5.5 自定义异常
你可以创建自己的异常类,继承自内置的Exception
类。
python">class MyCustomError(Exception):def __init__(self, message):super().__init__(message)try:raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:print(f"捕获到自定义异常: {e}")
5.6 捕获所有异常
虽然通常不建议捕获所有异常,但如果需要,可以使用except Exception
捕获所有类型的异常。
python">try:x = 10 / 0
except Exception as e:print(f"捕获到异常:{e}")
5.7 调试与日志
5.7.1 使用logging
模块
logging
模块提供了记录程序运行时事件的功能,特别适用于捕获和记录错误信息。
python">import logging# 配置日志
logging.basicConfig(level=logging.INFO)# 日志记录
logging.debug("调试信息")
logging.info("普通信息")
logging.warning("警告信息")
logging.error("错误信息")
logging.critical("严重错误")
小结
这一章介绍了Python的文件操作方法、异常处理机制以及如何使用logging
模块进行日志记录。通过掌握文件和异常处理,你可以编写更加健壮、易于维护的Python程序。
下一章将讨论更为进阶的内容——Python中的高级特性