当前位置: 首页 > 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…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...