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

关于 python 的异常使用说明 (python 的文件和异常)

文章目录

        • 异常
          • 1. 处理异常 ZeroDivisionError 异常
          • 2. 使用 try-except 代码块
          • 3. 使用异常避免崩溃
          • 4. else 代码块
          • 5. 处理 FileNotFoundError 异常
          • 6. 分析文本
          • 7. 失败时一声不吭

异常

pyhong 使用被异常成为异常的特殊对象来管理程序执行期间发生的错误。
每当发生让 python 不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个 tracback,其中包含有关异常的报告。
异常是使用 try-except 代码块处理的。它让python执行指定的操作,同时告诉python发生异常时该怎么办。使用它,即便出现异常,程序也将继续运行:显示你编写的友好错误信息,而不是令用户迷惑的 tracback

1. 处理异常 ZeroDivisionError 异常

我们先来看一下导致python异常的简单错误:
你可能知道不能将一个数字除以0,但我们让python这样做呢?

print(5/0)

在这里插入图片描述
python 解释器在运行中已经告诉我们错误问题了,
它说 除数为零的一种错误,而 ZeroDivisionError 这个异常对象,就是python无法按照你的要求正常执行时创建的。

为解决这个问题,我们可以使用:

2. 使用 try-except 代码块

当你认为可能会发生错误时,就可以编写这个代码块来处理可能引发的异常。

try:print(5/0)
except ZeroDivisionError:print('零不可以作为除数哦!')

在这段代码当中,
我们将导致错误的 代码放在了 try代码块中。如果try处的代码块运行时不会出现异常,python也将不会执行 except 代码块。反之,python 将查找 except 代码块,并执行其中的代码。

我们来看一下执行结果:
在这里插入图片描述

3. 使用异常避免崩溃

在发生错误时,如果程序还有工作没有执行完成,妥善地处理错误尤为重要。这种情况常会发生在要求用户提供输入的程序当中;如果能够妥善处理无效输入,就能再提示用户提供有效输入,而不至于崩溃。

我们来编写一个简单的计算器:

print('- - - 欢迎使用- 计算器 - - - ')
print('使用请按:'+'e'+',退出请按:'+'q')while True:uInfo = input('请您开始录入:')if uInfo == 'q':breakif uInfo =='e':number1 = input('请您录入被除数:')number2 = input('请您继续录入除数:')print('计算器正在为您计算结果....')print(int(number1)/int(number2))

我们只是编写一个简易的计算器,用于说明使用程序出现问题导致的问题。
如果正常编写是可以做四则运算的,而这里唯有的除法计算会造成什么样的问题呢?
结合上面的知识,我们知道这里需要编写一个 try-except 来处理,如果不进行处理,会造成两个问题,其一是让用户的使用感下降,尽量不要让用户体验到这种他看不懂的问题。其二是让攻击者有机可能,这种问题会导致你的程序被训练有素的攻击者攻击,他很有可能会通过的你 traceback 获取到你文件名称。

下面,我们通过 else 代码块的结合使用来处理这种现象:

4. else 代码块

这里我们继续将可能引发错误的代码放在 try-except代码块,来提高这个程序抵御错误的能力。但是这里还包含一个 elese 代码块,依赖于 try 代码块成功执行的代码都放到else 代码块中:

print('- - - 欢迎使用- 计算器 - - - ')
print('使用请按:'+'e'+',退出请按:'+'q')while True:uInfo = input('请您开始录入:')if uInfo == 'q':breakif uInfo =='e':number1 = input('请您录入被除数:')number2 = input('请您继续录入除数:')print('计算器正在为您计算结果....')try:answer = int(number1)/int(number2)except ZeroDivisionError:print('您不可以输入0作为除数!')else:print(answer)

在这段示例代码当中,我们将可能会出现错误的代码行放在 try中。程序在执行过程中遇到错误的话就会提示给用户我们提前设置好的内容,而不是显示给用户看不懂的非友好内容。
我们知道,如果程序按顺序执行成功,就会经过 try 代码块继续执行,这时的计算结 果就会在 else 语句中的代码行输出出来。也就是说 else 代码块写的的代码语句 都是经try 代码块运行成功后才需要运行的代码。

5. 处理 FileNotFoundError 异常

如果我们读取一个并不存在的文件,python 解释器会抛处什么样的异常呢?

filename = 'aa.txt'
with open(filename) as file_object:contets = file_object.read()

当然,我们并没有提前创建这个文件,
我们看一下这段代码的执行结果:
在这里插入图片描述
python 解释器开始报错了,
它显示 FileNotFoundError 异常,看来是因为 python 找不到要打开的文件,所以创建了这个异常。

其实这个错误是因为 open() 导致的。
处理这个问题也不难,记得我们今天学习的主旨是什么吗?
对,通过 tey-except 代码块来解决:

filename = 'aa.txt'try:with open(filename) as file_object:contets = file_object.read()
except FileNotFoundError:print('很抱歉,您要读取的:'+filename+'文件不存在哦!')

加上 try 代码块后,在运行这段代码示例,如果还是出现问题,
他会提示给用户这样的信息:
在这里插入图片描述

其实要处理的文件并不存在。因此这样进行处理的意义也并不大。下面我们将这个示例进行扩展,看看你在使用多个文件时,异常处理可提供什么样的帮助。

6. 分析文本

这里先给大家介绍一个函数,split()。它根据一个字符串创建一个单词列表。
什么意思呢?

方法 split()
以空格分隔符将字符串拆分成多个部分,并将这些部分都存储到一个列表中。结果是一个包含字符串中所有单词的列表。

现在,我们准备好一个文本文件,
在文本文件内部粘进寒窑赋的整篇内容。然后编写代码读取这个文件,
在成功读取之后,调用 split 函数分隔其中的元素,
最后输出分隔出来的内容,看看我们一共分隔了多少个元素:

filename = 'hyf.txt'try:with open(filename) as file_object:contets = file_object.read()except FileNotFoundError :print('很抱歉,您要读取的:'+filename+'文件不存在哦!')
else:words = contets.split()num_words = len(words)print('本篇文章一共包含段落:'+ str(num_words) +'个。')

在这段代码中,其实我们不处理可能出现的异常,程序也不会出现错误,
因为代码读取的该文本文件是存在的。

还有一点需要说明:
split() 函数是根据空格来拆分字符串存储为列表的。
所以执行这段代码,只有 7个段落行。

在这里插入图片描述

7. 失败时一声不吭

在这个标题里,想给大家介绍一个 pass 语句。
之前用到的 try 语句,都是 except 块中,设置了出现异常时显示给用户的友好信息,
但如果不想给用户显示内容呢?
我们可以利用 pass 语句:

try:#省略代码语句
except ZerroDivisionError:pass

这样编写的 except 代码块显示给用户既不会出现 traceback,也不会提示异常友好信息内容。而且 pass 语句还充当了占位符,它提醒你在程序的某个地方什么都没有做,并且以后也许要在这里做些什么。

相关文章:

关于 python 的异常使用说明 (python 的文件和异常)

文章目录异常1. 处理异常 ZeroDivisionError 异常2. 使用 try-except 代码块3. 使用异常避免崩溃4. else 代码块5. 处理 FileNotFoundError 异常6. 分析文本7. 失败时一声不吭异常 pyhong 使用被异常成为异常的特殊对象来管理程序执行期间发生的错误。 每当发生让 python 不知所…...

Spark RDD持久化

RDD Cache缓存 RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据以序列化的形式缓存在JVM的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供…...

【Linux】Linux系统安装Python3和pip3

1.说明 一般来说Linux会自带Python环境,可能是Python3或者Python2,可能有pip也可能没有pip,所以有时候需要自己安装指定的Python版本。Linux系统下的安装方式都大同小异,基本上都是下载安装包然后编译一下,再创建好软…...

用java进行base64加密

首先定义一组密钥,加密和解密使用同一组密钥private final String key "hahahahahaha";也可以随机生成密钥/*** 生成随机密钥* param keySize 密钥大小推荐128 256* return* throws NoSuchAlgorithmException*/public static String generateSecret(int keySize) th…...

torch函数合集

torch.tensor() 原型:torch.tensor(data, dtypeNone, deviceNone, requires_gradFalse) 功能:其中data可以是:list,tuple,NumPy,ndarray等其他类型,torch.tensor会从data中的数据部分做拷贝(而不是直接引用),根据原始数据类型生成相应类型的torch.Tenso…...

AcWing算法提高课-3.1.2信使

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 题目传送门点这里 题目描述 战争时期&#xff0c;前线有 nnn 个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。 信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;…...

Paddle OCR Win 11下的安装和简单使用教程

Paddle OCR Win 11下的安装和简单使用教程 对于中文的识别&#xff0c;可以考虑直接使用Paddle OCR&#xff0c;识别准确率和部署都相对比较方便。 环境搭建 目前PaddlePaddle 发布到v2.4&#xff0c;先下载paddlepaddle&#xff0c;再下载paddleocr。根据自己设备操作系统进…...

杂谈:数组index问题和对象key问题

面试题一&#xff1a; var arr [1, 2, 3, 4] 问&#xff1a;arr[1] ?; arr[1] ?答&#xff1a;arr[1] 2; arr[1] 2 这里可以再分为两个问题&#xff1a; 1、数组赋值 var arr [1, 2, 3, 4]arr[1] 10; // 数字场景 arr[10] 1; // 字符串场景 arr[a] 1; // 字符串…...

三天Golang快速入门—Slice切片

三天Golang快速入门—Slice切片Slice切片切片原理切片遍历append函数操作切片append添加append追加多个切片中删除元素切片合并string和slice的联系Slice切片 切片原理 由三个部分构成&#xff0c;指针、长度、容量指针&#xff1a;指向slice第一个元素对应的数组元素的地址长…...

腾讯会议演示者视图/演讲者视图

前言 使用腾讯会议共享PPT时&#xff0c;腾讯会议支持共享用户使用演示者视图/演讲者视图&#xff0c;而会议其他成员可以看到正常的放映视图。下面以Win10系统和Office为例&#xff0c;介绍使用步骤。值得一提的是&#xff0c;该方法同时适用于单显示屏和多显示屏。 腾讯会议…...

【C++】类与对象(一)

文章目录1、面向过程和面向对象初步认识2、类的引入3、类的定义4、类的访问限定符5、类的作用域6、类的实例化7、计算类对象的大小8、this指针9、 C语言和C实现Stack的对比1、面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题…...

JavaScript基本语法

本文提到的绝大多数语法都是与Java不同的语法,相同的就不会赘述了.JavaScript的三种引入方式内部js<body><script>alert(hello);</script> </body>行内js<body><div onclick"alert(hello)">这是一个div 点击一下试试</div>…...

OpenCV4.x图像处理实例-道路车辆检测(基于背景消减法)

通过背景消减进行道路车辆检测 文章目录 通过背景消减进行道路车辆检测1、车辆检测思路介绍2、BackgroundSubtractorMOG23、车辆检测实现在本文中,将介绍如何使用简单但有效的背景-前景减法方法执行车辆检测等任务。本文将使用 OpenCV 中使用背景-前景减法和轮廓检测,以及如何…...

pwnlab通关流程

pwnlab通关 关于文件包含&#xff0c;环境变量劫持的一个靶场 信息收集 靶机ip&#xff1a;192.168.112.133 开放端口 根据开放的端口信息决定从80web端口入手 目录信息 在images和upload路径存在目录遍历&#xff0c;config.php被渲染无法查看&#xff0c;upload.php需…...

面向过程与面向对象的区别与联系

目录 什么是面向过程 什么是面向对象 区别 各自的优缺点 什么是面向过程 面向过程是一种以事件为中心的编程思想&#xff0c;编程的时候把解决问题的步骤分析出来&#xff0c;然后用函数把这些步骤实现&#xff0c;在一步一步的具体步骤中再按顺序调用函数。 什么是面向对…...

主机状态(查看资源占用情况、查看网络占用情况)

1. 查看资源占用情况 【1】可以通过top命令查看cpu、内存的使用情况&#xff0c;类似windows的任务管理器 默认5s刷新一次 语法&#xff1a;top 可 Ctrl c 退出 2.磁盘信息监控 【1】使用df命令&#xff0c;查看磁盘信息占用情况 语法&#xff1a;df [ -h ] 以更加人性化…...

代码随想录算法训练营第四十一天 | 01背包问题-二维数组滚动数组,416. 分割等和子集

一、参考资料01背包问题 二维 https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1cg411g7Y6 01背包问题 一维 https://programmercarl.com/%E8%83%8C%E5…...

VMware NSX 4.1 发布 - 网络安全虚拟化平台

请访问原文链接&#xff1a;VMware NSX 4 - 网络安全虚拟化平台&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org VMware NSX 提供了一个敏捷式软件定义基础架构&#xff0c;用来构建云原生应用程序环境。NSX 专注于为具有异…...

计算理论 复杂度预备知识

文章目录计算理论 复杂度预备知识符号递归表达式求解通项公式主方法Akra-Bazzi 定理计算理论 复杂度预备知识 符号 f(n)o(g(n))f(n)o(g(n))f(n)o(g(n)) &#xff1a;∃c\exists c∃c &#xff0c;当 nnn 足够大时&#xff0c; f(n)<cg(n)f(n)\lt cg(n)f(n)<cg(n) &#…...

二叉树——二叉搜索树中的插入操作

二叉搜索树中的插入操作 链接 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c…...

【NotebookLM文献综述加速器】:20年科研老兵亲测的5步高效综述法,3天完成导师认可的高质量综述?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM文献综述辅助的底层逻辑与科研适配性 NotebookLM 由 Google Research 推出&#xff0c;其核心并非通用大语言模型问答&#xff0c;而是以用户上传的私有文档&#xff08;PDF、TXT 等&#xf…...

为什么顶尖纳米实验室已停用传统文献管理工具?NotebookLM私有知识中枢部署避坑清单(限内部研究员参考)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;NotebookLM纳米技术研究 NotebookLM 是 Google 推出的基于 AI 的研究协作者工具&#xff0c;其核心能力在于对用户上传的私有文档进行深度语义理解与上下文推理。在纳米技术这一高度跨学科、文献密集的研究领…...

【LabVIEW】驱动文件部署策略全解析:项目嵌入与系统集成的权衡与实践

1. LabVIEW驱动文件部署的核心挑战 第一次用LabVIEW控制仪器设备时&#xff0c;我盯着官方提供的驱动压缩包发呆了半小时——该把这些文件扔到哪个文件夹&#xff1f;这个问题看似简单&#xff0c;却直接关系到后续开发的便利性和项目可移植性。经过多个项目的实战验证&#xf…...

HLK-V20语音模块的智能家居实战:如何用STM32控制灯、电机并连接ESP8266上云

HLK-V20语音模块的智能家居实战&#xff1a;STM32联动控制与云端接入全解析 在智能家居DIY领域&#xff0c;语音控制早已从概念走向现实。HLK-V20作为一款高性价比的纯离线语音识别模块&#xff0c;配合STM32的丰富外设控制能力&#xff0c;可以构建出响应迅速、隐私安全的本地…...

DeepSeek总结的CloudNativePG 与 Crunchy PGO:一个诚实且带有主观见解的比较

来源&#xff1a;https://www.gabrielebartolini.it/articles/2026/05/cloudnativepg-and-crunchy-pgo-an-honest-opinionated-comparison/ CloudNativePG 与 Crunchy PGO&#xff1a;一个诚实且带有主观见解的比较 作者: Gabriele Bartolini 日期: 2026年5月18日 目录 Crunchy…...

告别单调按钮!用LVGL的imgbtn打造高颜值嵌入式UI(附9宫格切图技巧)

告别单调按钮&#xff01;用LVGL的imgbtn打造高颜值嵌入式UI&#xff08;附9宫格切图技巧&#xff09; 在嵌入式设备开发中&#xff0c;用户界面的美观度往往被忽视&#xff0c;开发者更关注功能实现而非视觉体验。然而&#xff0c;随着智能家居、可穿戴设备和工业控制面板的普…...

别再只用MD5了!聊聊Java中MessageDigest的SHA-256、SHA-3等算法选择与实战避坑

别再只用MD5了&#xff01;Java哈希算法安全升级实战指南 哈希算法在现代应用开发中扮演着数据指纹的角色&#xff0c;但很多Java开发者仍然停留在MD5/SHA-1的舒适区。当数据库泄露事件频发、算力攻击成本不断降低时&#xff0c;选择正确的哈希算法已经不再是简单的技术选型问题…...

CodeDroidAI:本地化AI代码助手的设计原理与工程实践

1. 项目概述&#xff1a;一个面向开发者的AI代码助手最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“FMXExpress/CodeDroidAI”。光看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你是个经常和代码打交道的开发者&#xff0c;尤其是对提升编码效率、探索A…...

深入浅出:STM32 USB BOS描述符与WCID配置详解(以WinUSB免驱为例)

STM32 USB BOS描述符与WCID配置实战解析&#xff1a;从协议到代码实现 在嵌入式开发领域&#xff0c;USB设备与主机系统的无缝对接一直是开发者关注的重点。传统USB设备在Windows平台上通常需要安装专用驱动程序&#xff0c;这不仅增加了用户使用门槛&#xff0c;也提高了开发维…...

基于RAG与向量数据库的智能知识库系统构建实战

1. 项目概述&#xff1a;当AI成为你的“第二大脑”最近在折腾一个挺有意思的开源项目&#xff0c;叫IIMS-By-AI。这个名字乍一看有点唬人&#xff0c;IIMS是“Intelligent Information Management System”的缩写&#xff0c;翻译过来就是“智能信息管理系统”。但它的核心玩法…...