当前位置: 首页 > 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的并发编程,请拭目以待吧!!

相关文章:

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

目录 前言 一、异常处理 (一)关键字 (二)捕获多个异常 (三)自定义异常 (四)抛出异常 (五)总结 二、文件读写 (一)打开文件 &…...

【C++】c++ 11

目录 前言 列表初始化 std::initializer_list 右值引用和移动拷贝 左值和右值 左值引用和右值引用的区别 万能引用(引用折叠) 完美转发 默认成员函数控制 列表初始化 在C98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列…...

uni-app 应用名称 跟随系统语言 改变

官方已确认BUG::https://ask.dcloud.net.cn/question/164804 { "name" : "%app.name%",//这里随便写,配置了 locales,name 就不生效了 "appid" : "", "description" : "", "versi…...

【大模型实战篇】高质量数据过滤及一种BoostedBaggingFilter处理方法的介绍

1. 高质量数据过滤 1.1 背景介绍 数据质量对于大模型的训练至关重要,经常会听到一句话:数据决定模型的上限。模型的性能上限通常受到训练数据的质量限制。如果数据集不够好,模型可能无法学习到泛化的特征,导致其在新数据上的表…...

使用Python和Proxy302代理IP高效采集Bing图片

目录 项目背景一、项目准备环境配置 二、爬虫设计与实现爬虫设计思路目标网站分析数据获取流程 代码实现1. 初始化爬虫类(BingImageSpider)2. 创建存储文件夹3. 获取图像链接4. 下载图片5. 使用Proxy302代理IP6. 主运行函数 运行截图 三、总结 项目背景 …...

Python酷库之旅-第三方库Pandas(118)

目录 一、用法精讲 521、pandas.DataFrame.drop_duplicates方法 521-1、语法 521-2、参数 521-3、功能 521-4、返回值 521-5、说明 521-6、用法 521-6-1、数据准备 521-6-2、代码示例 521-6-3、结果输出 522、pandas.DataFrame.duplicated方法 522-1、语法 522-2…...

讨论人机交互研究中大语言模型的整合与伦理问题

概述 论文地址:https://arxiv.org/pdf/2403.19876.pdf 近年来,大规模语言模型发展迅速。它们给研究和教育领域带来了许多变化。这些模型也是对人机交互(HCI)研究过程的有力补充,可以分析定性和定量数据,再…...

OpenCV结构分析与形状描述符(23)确定一个点是否位于多边形内的函数pointPolygonTest()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 进行点在轮廓内的测试。 该函数确定点是在轮廓内、轮廓外,还是位于一条边上(或与顶点重合)。它返回正值&…...

GitLab CI_CD 从入门到实战笔记

第1章 认识GitLab CI/CD 1.3 GitLab CI/CD的几个基本概念 GitLab CI/CD由以下两部分构成。 (1)运行流水线的环境。它是由GitLab Runner提供的,这是一个由GitLab开发的开源软件包,要搭建GitLab CI/CD就必须安装它,因…...

微服务实战系列之玩转Docker(十五)

前言 博主的玩转Docker系列,今天正式开启第十五篇的征程! 在过去的十四篇中,涉及的内容有知识、有原理、有工具、更有实践。当你打开每一篇文章时,均会获得一个特定主题的知识和技巧,助你在云原生的世界里&#xff0c…...

本地调试spark,访问kerberos鉴权的hdfs、hive

文章目录 准备连接hive的配置申请kerberos tgt在scala项目启动本地spark本地Jupyter Notebook启动pyspark 解决在wsl下进行开发、调试时,需要连接kerberos鉴权的hdfs、hive的问题 准备连接hive的配置 core-site.xml、hdfs-site.xml、yarn-site.xml、hive-site.xml复…...

Ubuntu 安装包下载(以20版本 阿里镜像站为例子)

Ubuntu安装包下载 上一篇文章写了一些国内常用的镜像站,这篇以阿里云镜像站Ubuntu20版本为例。 https://mirrors.aliyun.com/ubuntu-releases/ 1.点击自己想要下载的版本 2.点击以amd64.iso为结尾的文件,这个是安装文件,如果是桌面端&…...

会声会影Corel VideoStudio2025旗舰版最新中文旗舰版新功能讲解及使用会声会影使用教程

会声会影Corel VideoStudio2025旗舰版一款功能丰富的视频编辑软件。具有拖放式标题、转场、覆叠和滤镜,色彩分级、动态分屏视频和新增强的遮罩创建器,超越基本编辑,实现影院级效果。优化分屏剪辑功能,简化多时间轴编辑的工作流程&…...

【人工智能】OpenAI发布GPT-o1模型:推理能力的革命性突破,这将再次刷新编程领域的格局!

在人工智能领域,推理能力的提升一直是研究者们追求的目标。就在两天前,OpenAI正式发布了其首款具有推理能力的大语言模型——o1。这款模型的推出,不仅标志着AI技术的又一次飞跃,也为开发者和用户提供了全新的工具来解决复杂问题。…...

2024年TCGA基因表达数据下载(最新版)

文章目录 前言一、如何使用TCGA数据库获取公共数据?二、使用步骤1.点击Cohort Builder2.数据筛选3. Repository4.数据下载4.1 继续选择筛选条件4.2 添加cart并进入4.3 下载 总结 前言 TCGA 全称 The Cancer Genome Atlas ,即癌症基因组图谱。它是一个大型的癌症研…...

1. 运动控制指令概要(omron 机器自动化控制器)

机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…...

依赖注入(Dependency Injection)

依赖注入是一种设计原则,主要用于减少类之间的紧耦合度,通过将对象的选择和创建逻辑外包给一个容器来实现动态注入。 适用场景: 当需要将对象的生命周期管理和依赖关系外包给外部容器时(如Spring DI容器)。当应用程序…...

PHP环境搭建

PHP环境搭建教程 PHP 是一种流行的后端开发语言,用于构建动态网站和 Web 应用程序。在开发和部署 PHP 项目之前,您需要设置一个适当的 PHP 环境。本教程将帮助您在不同操作系统上快速搭建 PHP 环境。 1. 环境准备 1.1 操作系统 本教程将介绍在以下操作…...

小叶OJ 2716: 过河问题 ← 贪心算法

【题目来源】http://xiaoye.ac.cn/problem.php?id2716【题目描述】 有 n 个人要渡河,但只有一条小船,这条小船一次只能坐下最多两个人,并且只有一副船桨。每个人划船的速度不一样,如果两个人一起上船,由于重量变大&am…...

LeetCode509:斐波那契数列

代码如下 class Solution { public:int fib(int n) {//这个是为了特殊n&#xff0c;当n 0时&#xff0c; 当 n 1时。if(n 0) return 0;if(n 1) return 1;//第一次开dp专题&#xff0c;连dp数组都忘记定义了。只写了下面&#xff0c;哭vector<int> dp(n 1, 0);dp[…...

SecGPT-14B模型调优指南:降低OpenClaw安全任务Token消耗

SecGPT-14B模型调优指南&#xff1a;降低OpenClaw安全任务Token消耗 1. 为什么需要关注Token消耗问题 去年冬天&#xff0c;当我第一次用OpenClaw对接SecGPT-14B执行安全日志分析时&#xff0c;被惊人的Token消耗吓了一跳——一个简单的500行日志分析任务竟然消耗了近3万Toke…...

自感痕迹的原创性与哲学意义

自感痕迹的原创性与哲学意义摘要“自感&#xff08;活动/状态&#xff09;即自我”及其核心概念“痕迹”&#xff0c;构成了一套系统性的、跨传统的自我理论。本文旨在阐明这一理论体系的原创性来源与哲学史意义。研究指出&#xff0c;该理论的原创性并非体现于凭空制造全新术语…...

Spring Boot后端实战:手把手教你处理Google Play订阅续费、降级与退款回调

Spring Boot实战&#xff1a;Google Play订阅状态变更的深度处理指南 订阅业务中的关键挑战 移动应用订阅模式已成为开发者重要的收入来源&#xff0c;而Google Play作为全球最大的应用分发平台&#xff0c;其订阅系统的复杂性往往让开发者头疼。特别是当用户进行订阅续费、降…...

Unity 2018/2019下,Mega-Fires 3.48插件20种变形效果实测与避坑指南

Unity 2018/2019下Mega-Fires 3.48插件20种变形效果深度解析与实战避坑 在Unity 2018和2019版本中&#xff0c;Mega-Fires 3.48插件以其强大的Mesh变形能力吸引了大量开发者。这款插件提供了20种独特的变形效果&#xff0c;从基础的弯曲、扭曲到复杂的自由变形和翻页效果&#…...

REFramework终极指南:让RE引擎游戏体验焕然一新的完整解决方案

REFramework终极指南&#xff1a;让RE引擎游戏体验焕然一新的完整解决方案 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework REFramework是专为RE…...

终极Webpack插件完全手册:从Awesome-Webpack探索插件生态的10个实用技巧

终极Webpack插件完全手册&#xff1a;从Awesome-Webpack探索插件生态的10个实用技巧 【免费下载链接】awesome-webpack A curated list of awesome Webpack resources, libraries and tools 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-webpack Webpack作为现…...

Pixel Language Portal惊艳效果展示:全屏沉浸双栏布局下中英对照滚动同步+光标联动演示

Pixel Language Portal惊艳效果展示&#xff1a;全屏沉浸双栏布局下中英对照滚动同步光标联动演示 1. 像素语言传送门概览 **像素语言跨维传送门(Pixel Language Portal)**是一款基于腾讯Hunyuan-MT-7B核心引擎构建的创新翻译工具。与传统翻译软件不同&#xff0c;它将语言转…...

Infect工具完整教程:快速掌握Android设备病毒传播技术

Infect工具完整教程&#xff1a;快速掌握Android设备病毒传播技术 【免费下载链接】infect Infect Any Android Device With Virus From Link In Termux 项目地址: https://gitcode.com/gh_mirrors/in/infect Infect是一款基于Bash的Android病毒传播工具&#xff0c;专为…...

新手必看!UI-TARS-desktop快速上手:一句话让电脑自动干活

新手必看&#xff01;UI-TARS-desktop快速上手&#xff1a;一句话让电脑自动干活 你是否想过&#xff0c;只需要对电脑说一句话&#xff0c;它就能自动完成各种任务&#xff1f;UI-TARS-desktop正是这样一个神奇的AI助手&#xff0c;它能听懂你的自然语言指令&#xff0c;并自…...

2026年04月05日最热门的开源项目(Github)

在本期榜单中&#xff0c;有多个项目得到了较高的关注和热度&#xff0c;以下是对这些项目的一些分析&#xff1a; 总体趋势&#xff1a; 本期榜单主要集中在与人工智能&#xff08;AI&#xff09;、代码生成和代理系统相关的项目上。很多项目致力于提高代码效率、优化开发流程…...