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

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

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

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...