Python的秘密基地--[章节5] 文件与异常处理

news/2024/12/11 15:27:27/

第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 异常处理流程
  1. try:尝试执行可能引发异常的代码。
  2. except:捕获异常并进行处理。
  3. else:如果没有异常发生,执行此部分代码。
  4. 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中的高级特性


http://www.ppmy.cn/news/1554251.html

相关文章

java类静态初始化死锁问题

问题 前端时间帮同事分析了一个IO线程阻塞问题,该问题导致服务端无法处理任何请求,只能进行重启解决;事发时运维dump了下栈信息,堆栈信息如下图: 从上面可以看到io线程都阻塞于Object.wait(),具体是执行Cl…

Xcode模拟器运行报错:The request was denied by service delegate

Xcode模拟器运行报错:The request was denied by service delegate 造成的原因: (1)新的苹果M系列芯片的Mac电脑 (2)此电脑首次安装启动Xcode的应用程序 (3)此电脑未安装Rosetta 2 解决方法: …

【蓝桥杯每日一题】X 进制减法

X 进制减法 2024-12-6 蓝桥杯每日一题 X 进制减法 贪心 进制转换 题目大意 进制规定了数字在数位上逢几进一。 XX 进制是一种很神奇的进制, 因为其每一数位的进制并不固定!例如说某 种 XX 进制数, 最低数位为二进制, 第二数位为十进制, 第三数位为八进制, 则 XX 进制…

Xilinx IDDR和 ODDR原语使用和仿真

// IODDR 回环 ,使用 SAME_EDGE 模式,注意的是 从 ODDR输出 时钟需要偏移90度,不然数据 上下沿采样错误 // 数据从 IDDR 输出时,最好将 数据和 frame 有效信号 同步在偏移90度的时钟下 // 本测试内容 是 50MHZ 的 8bit &#xff0…

【jvm】为什么要有GC

目录 1. 自动内存管理2. 提升程序稳定性3. 优化性能4. 跨平台能力5. 分代回收策略 1. 自动内存管理 1.JVM中的GC机制负责自动管理内存,这意味着开发人员不需要手动分配和释放内存。2.这一特性大大简化了Java程序的内存管理,降低了内存泄漏和内存溢出等问…

深信服ATRUST与锐捷交换机端口链路聚合的配置

深信服ATRUST业务口原来只配置使用一个电口,近期出现流量达到800-900M接近端口的极限带宽。由于设备没有万光口,于是只好用2个光口来配置链接聚合。 下需附上深信服ATRST端口配置的截图,由于深信服ATRUST与锐捷交换机端口只共同支持源mac目的…

SQL UCASE() 函数:转换字符串为大写

SQL UCASE() 函数:转换字符串为大写 概述 在SQL中,UCASE() 函数用于将字符串中的所有字符转换为大写。这是一个非常实用的函数,尤其在处理大量文本数据时,确保数据的一致性和准确性。本文将详细介绍UCASE() 函数的用法、示例以及…

easyocr配置及相关训练

easyocr配置及相关训练 1,相关链接2,安装配置3,官方模型测试4,自定义数据集训练及测试(1)标签转换脚本(2)生成lmdb数据格式(重要)(3)预…