Python快速上手系列--异常处理--详解篇

news2024/11/13 14:59:01

本章所说的就是我们经常遇到的一个问题,报错、异常。我们应该如何处理,让它不影响后面的程序运行。

异常

首先我们看看一个简单的示例。

print(2/0)

其结果可想而知,当然是报错了!程序被终止了!

这里会提示用户,指出这个异常对象,有没有什么办法不让它报这样的错误呢,当然有!

try-except就可以帮助到我们。

try:    print(2/0)except ZeroDivisionError:    print('不能这样计算哦')

用法:try:里面是主程序,except:里面写打印提示语句或者其他的程序都可以

清安这里except里面还加入了异常ZeroDivisionError,这里不加也是可以的哦,其效果类似。当然,如果你想准确捕捉异常的话,肯定还是需要加上的。

来看看我们处理python的异常后的效果:

其实,这里有点类似于if-else,但是这里先由主程序运行,再到判断,再到避免,避免成功后继续运行代码。看看下面的示例吧。

补充点:

try:    print(2/0)except ZeroDivisionError as e:    print(e, '不能这样计算哦')

这里比上述多写了一个as e,为什么呢,打印默认错误提示。但是后面我仍然写了我们想要它给我的一个错误提示,这里主要是起一个对比作用,实际情况上,这里写一种就好。

另外,异常种类有很多,这里并没有一一列举了,各位学完可以自己慢慢琢磨。

3.1、正确使用异常,避开崩溃

while True:    first_name = input("请输入名字:")    if first_name == 'zhangsan':        break    last_name = input("请输入名字:")    if last_name == 'lisi':        break    full_name = int(first_name + last_name)    print(full_name)

这段程序,看似没什么问题,当我们输入英文字符的时候,就会报错了,因为清安加了一个int类型的字符转换进去哦。非整型相加就会报错!!!

看到了吧报了ValueError错误,接下来我们避免它:

while True:    first_name = input("请输入名字:")    if first_name == 'zhangsan':        break    last_name = input("请输入名字:")    if last_name == 'lisi':        break    try:        full_name = int(first_name + last_name)    except:        print("整型不能这样相加哦!")    else:        print(full_name)

这里我们就可以避免它因为报错而终止程序了,从未接着运行代码,看效果:

这里就成功的避开了异常告示,我们可以继续进行while循环。

3.2、处理FileNotFoundError错误

这里其实就是找不到文件,而报出的异常。让我们看例子:

with open('name_t.txt','r') as nt:    come = nt.read()

我们读取一个没有创建的文本,python就会告诉我们:

没有发现name_t.txt文件,处理方式呢,跟上处相类似。

try:    with open('name_t.txt','r') as nt:        come = nt.read()except:    with open('123.txt','r') as rd:        come_1 = rd.read()        print(come_1.split())    print("没有找到这个文件哦")

这里为了更好的辨别的。我们使用两个文本做了对比,使用try-except做了一个判断,打开了第一个文件name_r.txt文件,并读取,后面我们使用except做了打开另一个文件并且读取并输出内容。split是将文本中的内容以空格为分隔符将字符串拆分多个部分,呈现列表的形式给倒我们。

解惑:这里也就先当与判断有没有name_t.txt文件,没有文件python就会报出异常,我们使用except输出一个没有找到文件,将这个错误避开。进而执行下一步操作,打开另一个文件。

又有好奇宝宝问了,这里你得with跟最后一个print同级,不是先运行第一个再后面吗,这里我们再try运行后下一步就已经执行了except了,所以只是打印结果的前后顺序不同而已。

3.3、使用函数打开多个文件

def name_txt(file_name):    try:        with open(file_name,'r') as nt:            nt = nt.read()    except:        print("没有找到这个文件哦")    else:        print(nt.split())file_name = ['123.txt','321.txt','dog.txt']for file_names in file_name:    name_txt(file_names)

这里我们传递多个文本文件使用的是for循环的方式,定义一个形参,将形参给到with open,并且我们用try-except做了避免错误的方法,让循环可以循环整个列表,清安这里还给出了一个没有的文本文件验证这个错误是否正常避免哦。

3.4、让避免信息不显示

def name_txt(file_name):    try:        with open(file_name,'r') as nt:            nt = nt.read()    except:        pass    else:        print(nt.split())file_name = ['123.txt','321.txt','dog.txt']for file_names in file_name:    name_txt(file_names)

我们只需要直接将避免错误的信息去掉就好了,改成pass直接忽略掉这个错误信息即可。

注:这里告诉你的是最简便的方法,此类还有很多的详细用法,但是作为快速上手,这类方法先做了解,后续会慢慢详细的讲解

3.5、不论怎样都执行

try:    print(2/0)except:    print("不能这样算,回去好好复习")finally:    print('你好笨')

这里的finally不论怎么样,它都会执行。此处做一个了解,看你得需求怎么样,根据实际情况来定,看是否需要用到finally。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

索引-性能分析-慢查询日志

索引语法 1、创建索引时候 [UNIQUE | FULLTEXT] 关键字是可选的; 1)加上 UNIUQE 就是创建唯一索引(唯一索引,说明改字段不能出现重复数据); 2)加上FULLTEXT 创建的是一个全文索引;…

Webpack5 环境下 Openlayers 标注(Icon) require 引入图片问题

Webpack5 环境下 Openlayers 标注(Icon) require 引入图片问题环境版本Openlayers 使用 require 问题Webpack5 正确配置构建新环境的时候,偶然发现 Openlayers 使用 require 的方式加载图片(Icon)报错,开始…

电子技术——DC偏移

电子技术——DC偏移 因为差分放大器是直接耦合的并且对于DC有着有限的增益,因此本节我们讨论差分放大器在DC相关方面的问题。 MOS差分放大器的输入偏移电压 考虑下面的电路,我们将MOS差分放大器的输入端都置地: 此时假如电路完全对称&#…

IP地址:揭晓安欣警官自证清白的黑科技

《狂飙》这部电视剧,此从播出以来可谓是火爆了,想必大家都是看过的。剧中,主人公“安欣”是一名警察。一直在与犯罪分子做斗争。 莽村的李顺案中,有匿名者这个案件在网上发帖恶意造谣,说安欣是黑恶势力的保护伞&#…

将视频作为桌面动态壁纸,只需要两步,让你保存的视频在桌面动起来,动态壁纸工具,视频动态壁纸,小风车,桌面美化工具

这款软件可以让你宝贵的视频资源变成动态壁纸显示在你的电脑上,体积小巧,不需要安装,即点即用。 一、软件简介 这是一款可以将视频文件作为动态壁纸展示在电脑桌面的软件,它体积小巧,占用资源也不多,相比…

SpringMVC基础入门(一)之理论基础概念

文章目录SpringMVC1.概念2.常用注解请求与响应1.请求参数2.JSON传输3.常用注解响应1.响应页面2.响应JSON数据Rest风格1.介绍2.常用注解SpringMVC 1.概念 (1)定义 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架。 (2)为什…

test2

物理层故障分析 一、传输介质故障 a.主要用途简述 传输介质主要分为 导向传输介质和非导向传输介质。前者包括双绞线(两根铜线并排绞合,距离过远会失真)、同轴电缆(铜质芯线屏蔽层,抗干扰性强,传输距离更…

VScode查看python f.write()的文件乱码

VScode查看python f.write()的文件乱码 在使用 VScode 编写 python 代码, print(),汉字正常显示, 使用 with open()as f: f.write()文件后, 在 …

【Java】HashMap原理

哈希表(Hash table) 也叫散列表,是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快…

nvm安装后出现‘node‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

出现这个问题多半是path地址不对。 打开系统环境变量。看看path里面有没有?没有的话,加上就行! 我的报错原因就是因为path里没有自动加上nvm的相关路径。 注意项: 1,在安装nvm之前,提前要把本机以前安装…

剑指 Offer 32 - II. 从上到下打印二叉树 II(java解题)

剑指 Offer 32 - II. 从上到下打印二叉树 II(java解题)1. 题目2. 解题思路3. 数据类型功能函数总结4. java代码5. 踩坑记录1. 题目 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉…

2023年开始,为什么公司运营依赖于流程文档?

当您的业务扩展时,您会得到越来越多的活动部件,跟踪复杂性是某人的工作。人员和任务需要以最有成效的方式组织,您必须找到某种方式让员工知道如何执行有效完成工作所需的流程。为了使过程可重复,需要将其记录在案。有人需要写下你…

关于conda env导出yaml无法create的问题解决

在使用conda env 命令创建package 列表之后,无法用yml文件创建新的环境。 这是因为在环境导出的时候没有加--no-builds 这个选项。 conda env export 正确的导出环境的做法如下: conda env export --no-builds > environment.yml--no-builds 的作用…

(C语言)自定义类型,枚举与联合

问:1. 结构体在自引用的时候不能怎么样?可以怎么样?2. Solve the problems:自定义一个学生结构体类型,要包含姓名,性别,年龄,六科成绩,家乡(也为结构体&#…

服务器开发29:Kubernetes (K8S)上手简单实践(2/13)

文章目录一、Kubernetes (K8S) 简介1)简介2)主要特性:3)学习前提4)不同部署方案5)为什么需要K8S6)K8S集群架构7)Kubernetes 组件二、安装k8s集群1)安装方式介绍2&#xf…

python笔记-- “__del__”析构方法

-#### 1、基本概念(构造函数与析构函数) 特殊函数:由系统自动执行,在程序中不可显式地调用他们 构造函数: 建立对象时对对象的数据成员进行初始化(对象初始化) 析构函数: 对象生命期…

【IPD】集成产品开发培训课程「3月4-5日」

课程名称集成产品开发(Integrate Product Development)参加对象企业CEO/总经理、产品总监、研发总监/副总、总工/技术总监、市场总监、制造总监、采购总监、产品经理/研发项目经理、研发管理部/技术管理部经理、流程管理部/质量管理部经理、项目管理及质…

Spring Cloud alibaba之Feign

JAVA项目中如何实现接口调用?HttpclientHttpclient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持Http协议的客户端编程工具包,并且它支持HTTP协议最新版本和建议。HttpClient相比传统JDK自带的URL Connection&a…

Java对象内存布局及对象头详解

对象在堆内存中布局 平常我们都在使用对象,现在从底层角度来分析下java对象的内存布局,以及对象布局各部分含义。 周志明老师JVM第三版的定义: 在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头&#xff…

积跬步至千里 || 利用 os.walk 函数读取不同文件夹里的数据

利用 os.walk 函数读取不同文件夹里的数据 在很多情况下,我们需要读取某个文件夹中不同子文件夹里的各种数据文件. 此时, 我们可以利用 os.walk() 进行迭代执行. os.walk() 返回一个迭代器, 包括根目录(roots)、子目录(dirs)和文件(files)三个内容: roots 就是所有文件夹名作…