python的文件草果和异常处理部分学习

在Python中,文件操作是编程中的一个重要部分。文件操作通常包括打开文件、读取或写入文件内容以及关闭文件。以下是文件操作的基本步骤和常用方法:

打开文件
使用open()函数可以打开一个已经存在的文件或创建一个新文件。open()函数需要两个参数:文件名和模式(如只读、写入等)。

f = open('example.txt', 'r') # 打开文件example.txt,以只读模式
Copy
常见的文件模式有:

'r': 只读模式(默认)
'w': 写入模式,如果文件存在则覆盖原有内容
'a': 追加模式,在文件末尾添加内容
'x': 创建模式,如果文件已存在则会引发异常
'b': 二进制模式
't': 文本模式(默认)
读取文件
打开文件后,可以使用多种方法读取文件内容:

read(): 读取整个文件内容为字符串
readline(): 每次读取一行
readlines(): 读取所有行并返回一个列表
content = f.read() # 读取整个文件内容
print(content)

写入文件
使用write()或writelines()方法可以向文件中写入数据:

with open('output.txt', 'w') as f:
f.write('Hello, World!\n')
f.writelines(['Line 1\n', 'Line 2\n'])

关闭文件
使用完文件后,务必调用close()方法关闭文件,以释放资源。更好的做法是使用with语句来自动管理文件的打开和关闭:

with open('example.txt', 'r') as f:
content = f.read()
print(content)

异常处理是编写健壮代码的关键。通过捕获和处理异常,可以确保程序在遇到错误时不会崩溃,并能够优雅地处理这些错误。

基本语法
使用try-except语句可以捕获异常:

try:
# 可能引发异常的代码
result = 10 / 0
except ZeroDivisionError:
print("除零错误")
Copy
多个异常
可以捕获多个不同类型的异常:

try:
# 可能引发异常的代码
file = open('nonexistent.txt', 'r')
except FileNotFoundError:
print("文件未找到")
except IOError:
print("输入输出错误")

else 和 finally

else块会在没有异常发生时执行。
finally块无论是否发生异常都会执行,常用于清理操作。
try:
file = open('example.txt', 'r')
content = file.read()
except FileNotFoundError:
print("文件未找到")
else:
print("文件内容:", content)
finally:
if 'file' in locals():
file.close()

自定义异常
可以通过继承内置的Exception类来创建自定义异常:

class MyCustomError(Exception):
pass

try:
raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:
print(e)

使用上下文管理器
推荐使用with语句来管理文件,它会自动处理文件的打开和关闭,避免忘记关闭文件导致资源泄露。

详细记录异常信息
在捕获异常时,最好记录详细的错误信息,以便后续调试和维护。可以使用日志库(如logging模块)来记录异常。

尽量具体化异常类型
避免使用过于宽泛的except语句(如except Exception),而是尽量捕获具体的异常类型,这样可以更精确地处理不同类型的错误。

使用路径库处理文件路径
使用pathlib.Path对象可以更好地处理跨平台的文件路径问题,确保代码在不同操作系统上都能正常工作。

from pathlib import Path

file_path = Path('example.txt')
if file_path.exists():
with file_path.open('r') as f:
print(f.read())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877674.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

25.2.1小记

Object类Object类中自带的toString和equals函数(默认比较管理者是否管理相同的对象,可以通过对子类函数的重构实现正常比较) // @Override//重写,编译器会默认构造类型检查public boolean equals(Object obj) {//向下造型CD cc = (CD)obj;return artist.equals(cc.artist…

“尝试一下挣钱的辛苦”之装师

我尝试了把我做的兽头卖出去,记录一下从孩子出生到找到妈咪领养的过程 因为没有太多预算,所以兽设没有找画师,我自己构思的;整个制作过程都要用到热熔胶,很容易烫到>_<(热熔胶——手作娘离不开的东西),梳理毛布也很让人头疼,弄得房间里都是毛毛,虽然但是,孩子…

“尝试一下挣钱的辛苦”

我尝试了把我做的兽头卖出去,记录一下从孩子出生到找到妈咪领养的过程 因为没有太多预算,所以兽设没有找画师,我自己构思的;整个制作过程都要用到热熔胶,很容易烫到>_<(热熔胶——手作娘离不开的东西),梳理毛布也很让人头疼,弄得房间里都是毛毛,虽然但是,孩子…

VScode使用插件open-in-browser在默认浏览器中打开html文件

1. vscode extension中搜索open in browser,并下载。 我下载的第一个2. 打开.html文件 alt+shift+b手动选择特定浏览器打开 alt+b用默认浏览器打开,如果没有设置默认浏览器,可能出现以下问题3. 配置默认浏览器 ctrl+shift+p打开command palette 输入settings.json,打开Open…

在MacOS上安装sqllite

参考教程 https://www.runoob.com/sqlite/sqlite-installation.html 1.下载sqllite安装包 https://www.sqlite.org/2025/sqlite-autoconf-3480000.tar.gz wget https://www.sqlite.org/2025/sqlite-autoconf-3480000.tar.gz tar -xvzf sqlite-autoconf-3480000.tar.gz cd sqlit…

【译】MongoDB EF Core 提供程序:有什么新功能?

原文 | Rishit, Luce 翻译 | 郑子铭 这是 Rishit Bhatia 和 Luce Carter 的客座文章。Rishit 是 MongoDB 的高级产品经理,专注于 .NET 开发人员体验,在进入产品管理部门之前,他已经使用 C# 工作多年。Luce 是 MongoDB 的开发倡导者、Microsoft MVP,热爱代码、阳光和学习。本…

06. 文件权限

一、文件属性Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保证系统的安全性,Linux 系统对不同的访问用户访问同一个文件(包括目录文件)的权限做了不同的规定。在 Linux 中,我们可以使用 ll 或者 ls -l 命令来显示一个文件的属性以及…

java中的Hashtable

Hashtable Hashtable 是 Java 中的一个古老的集合类,它实现了 Map 接口,基于哈希表存储键值对。 Hashtable 是线程安全的,所有方法都用 synchronized 修饰,因此在多线程环境下可以安全使用。 不过,由于它的性能较差,现代开发中更推荐使用 HashMap Hashtable中的t是小写,…

[HCTF 2018]admin

打开靶机进入登录界面,账号输入admin,密码随便输入一个密码,使用burp抓包后发送到攻击器将密码设为变量,导入字典,开始攻击发现密码"123"的返回长度不同,使用"123"登录,得到flag

DeepSeek LLM

一、背景动机开源社区的关注点:LLaMA 之后,开源社区主要关注训练固定规模的高质量 LLM(如 7B、13B、34B 和 70B),而对 LLM 的缩放定律研究探索较少。缩放定律的重要性:当前开源 LLM 仍处于 AGI 发展的初期阶段,因此研究扩展定律对于未来发展至关重要。缩放结论的分歧:早…

24-25Web开发技术#SpringBoot综合项目实战e1

选用IntelliJ IDEA Community Edition 2024.2 将reggie作为项目(Project)打开 开发环境搭建 系统开发及运行环境 JDK安装尽量遵循原项目的配置,在Oracle官网下载JDK11需注册Oracle账户,较麻烦。 在https://jdk.java.net/archive/找到11 GA (build 11+28)下载Windows版本的压缩…