当前位置: 首页 > news >正文

Python编程 - 异常处理与文件读写

目录

前言

一、异常处理

(一)关键字

(二)捕获多个异常

(三)自定义异常

(四)抛出异常

(五)总结

二、文件读写

(一)打开文件

(二)文件读操作

(三)文件写操作

(四)文件操作中的上下文管理

(五)处理二进制文件

(六)文件指针操作

(七)文件操作的异常处理

(八)总结

三、总结


前言

上篇文章主要讲的是python的三器一包, 迭代器、生成器、解释器和闭包,接下来再一起了解python的异常处理和文件读写模块。


一、异常处理

python的异常处理机制用于处理在程序运行时可能出现的错误,避免程序因未处理的错误而崩溃。python通过 tryexceptelsefinally 语句提供了一种结构化的异常处理方式。

(一)关键字

python异常处理相关的关键字有try、except、else、和finally,详细介绍如下:

  • try语句

try 语句用于定义一个代码块,在这个代码块中可能会发生异常。try 语句的基本结构如下:

try:# 可能会引发异常的代码result = 10 / 0
  • except 语句

except 语句用于捕捉并处理 try 代码块中引发的异常。你可以捕捉特定类型的异常,也可以捕捉所有异常。except 语句的基本结构如下:

try:result = 10 / 0
except ZeroDivisionError:print("发生了除以零错误")

还可以使用 as 关键字将异常实例绑定到一个变量,以便在 except 块中访问详细的异常信息:

try:result = 10 / 0
except ZeroDivisionError as e:print(f"发生了异常: {e}")
  • else语句

else 语句是可选的,它在 try 代码块没有引发异常时执行。如果 try 代码块引发了异常,则 else 块中的代码不会执行。

try:result = 10 / 2
except ZeroDivisionError:print("发生了除以零错误")
else:print("没有异常发生,结果是:", result)
  • finally语句

finally 语句也是可选的,它无论是否发生异常都会执行。通常用于清理资源,如关闭文件或释放网络连接。finally 的基本结构如下:

try:file = open('example.txt', 'r')content = file.read()
except FileNotFoundError:print("文件未找到")
finally:file.close()  # 无论是否发生异常,都会执行

(二)捕获多个异常

可以在一个 except 块中捕捉多个异常,使用元组的形式:

try:result = 10 / 0
except (ZeroDivisionError, FileNotFoundError) as e:print(f"发生了异常: {e}")

若在except中使用Exception关键字,则是捕获所有异常:

try:result = 10 / 0
except Exception as e:print(f"发生了一个异常: {e}")

(三)自定义异常

用户可以创建自定义的异常类,继承自 Exception 类。这样可以提供更具体的异常信息:

示例:

class MyCustomError(Exception):passtry:raise MyCustomError("这是一个自定义异常")
except MyCustomError as e:print(f"捕捉到自定义异常: {e}")

(四)抛出异常

except 块中,你可以使用 raise 语句重新抛出异常,以便在外层捕捉:

示例:

try:try:result = 10 / 0except ZeroDivisionError:print("处理了除以零错误")raise  # 重新抛出异常
except ZeroDivisionError:print("重新捕捉到异常")

(五)总结

python的异常处理机制使得程序能够优雅地处理错误,提高代码的健壮性和可读性。通过合理地使用 tryexceptelsefinally 语句,你可以确保程序在异常发生时能采取适当的措施,而不是简单地崩溃。


二、文件读写

python 提供了强大的文件读写功能,使得处理文件操作变得简单和直观。

(一)打开文件

在 python 中,你可以使用内置的 open() 函数打开文件。open() 函数的基本语法如下:

file = open('filename.txt', 'mode')

filename.txt 是文件的路径,可以是相对路径或绝对路径。mode 是打开文件的模式,常见的模式包括:

  • 'r':只读模式,默认值。

  • 'w':写入模式,会覆盖文件内容,如果文件不存在则创建。

  • 'a':追加模式,在文件末尾追加内容,如果文件不存在则创建。

  • 'b':二进制模式,用于处理非文本文件,例如图片。可以与其他模式组合使用,如 'rb''wb'

(二)文件读操作

  • 读取整个文件:
with open('filename.txt', 'r') as file:content = file.read()print(content)
  • 逐行读取文件
with open('filename.txt', 'r') as file:for line in file:print(line, end='')

或使用 readlines() 方法读取所有行并返回一个列表:

with open('filename.txt', 'r') as file:lines = file.readlines()for line in lines:print(line, end='')

(三)文件写操作

  • 写入文本到文件
with open('filename.txt', 'w') as file:file.write("Hello, World!")
  • 追加文本到文件
with open('filename.txt', 'a') as file:file.write("\nAppended line.")

(四)文件操作中的上下文管理

使用 with 语句可以确保文件在操作完成后自动关闭,这是一种推荐的做法。with 语句会在块结束时自动调用文件对象的 close() 方法,无论操作是否成功:

示例:

with open('filename.txt', 'r') as file:content = file.read()
# 文件在此处自动关闭

(五)处理二进制文件

对于二进制文件,如图片、视频等,你需要使用 'b' 模式打开文件:

  • 读取二进制文件
with open('image.jpg', 'rb') as file:binary_data = file.read()
  • 写入二进制文件
with open('output.jpg', 'wb') as file:file.write(binary_data)

(六)文件指针操作

文件指针可以通过 seek()tell() 方法进行操作:

seek(offset, whence):移动文件指针。

  • offset:从 whence 指定的位置开始的字节偏移量。
  • whence:指定偏移量的起始位置。0 表示文件开头,1 表示当前位置,2 表示文件末尾。

示例:

with open('filename.txt', 'r') as file:file.seek(10)  # 移动到文件的第10个字节content = file.read()

tell():返回文件指针的当前位置。

示例:

with open('filename.txt', 'r') as file:file.seek(10)position = file.tell()print(f"当前文件指针的位置是: {position}")

(七)文件操作的异常处理

处理文件操作时,你应该考虑处理可能发生的异常,例如文件不存在或权限错误。可以使用 try...except 语句来捕捉这些异常。

示例:

try:with open('filename.txt', 'r') as file:content = file.read()
except FileNotFoundError:print("文件未找到")
except IOError as e:print(f"文件操作错误: {e}")

(八)总结

python 的文件读写操作非常灵活,可以处理文本文件和二进制文件。通过使用 open() 函数配合适当的模式和上下文管理 (with 语句),可以方便地进行文件的读取和写入,同时确保文件的正确关闭。掌握这些基础知识,可以帮助你有效地处理文件操作任务。


三、总结

这篇文章主要介绍python的异常处理和文件读写操作,异常处理可以保证代码执行异常时的正常运行,文件读写则是可以对数据进行操作,将数据落盘或者将文件读取到内存中。下一篇开始接触python的并发编程,请拭目以待吧!!


http://www.mrgr.cn/news/27912.html

相关文章:

  • 3. Spring Cloud Eureka 服务注册与发现(超详细说明及使用)
  • stm32教程:OLED屏显示字母、汉字、图片工程讲解
  • 解决Anaconda出现CondaHTTPError: HTTP 000 CONNECTION FAILED for url
  • STM32 设计的较为复杂的物联网项目,包括智能家居控制系统,涵盖了硬件和软件的详细设计。
  • #Swift Automatic Initializer Inheritance
  • 如何使用 WebAssembly 扩展后端应用
  • 拒绝低效!开发者必备AI工具助你事半功倍!
  • Sitecore 定时任务使用介绍
  • python多线程程序设计 之一
  • 【Python爬虫系列】_022.异步文件操作aiofiles
  • Python快速入门 —— 第二节:函数与控制语句
  • comfyui中,sam detector与yoloworld图像分割算法测试以及影响
  • 智能摄像头MP4格式化恢复方法
  • Python快速入门 —— 第七节:其他概念
  • 企业社会信任数据,信任指数(2004-2022年)
  • <<编码>> 第 12 章 二进制加法器--全加器 示例电路
  • 图论篇--代码随想录算法训练营第六十一天打卡| Floyd 算法,A*算法
  • 【Linux 20】进程控制
  • python定时扫描文件夹、多线程、日志输出、文件备份
  • 八、动态规划-算法总结
  • 刘润《关键跃升》读书笔记9
  • 深度学习笔记(6)文本分类
  • Python中匹配HTML标签时<.*>和<.*?>有什么区别
  • 顺序栈和链栈
  • 828华为云征文 | 华为云Flexus X实例柔性算力助力中小企业和开发者
  • 【最佳实践】配置类封装-Async异步注解以及自定义线程池