python之异常处理

关于错误和异常

(1)概念:错误是无法通过其他代码进行处理问题,如语法错误和逻辑错误,语法错误是单词或格式等写错,只能根据系统提示去修改相应的代码,逻辑错误是代码实现功能的逻辑有问题,系统不会报错,也是只能找到相应的代码进行修改;异常是程序执行过程中,出现的未知问题,这里语法和逻辑都是正确的,可以通过其他代码进行处理修复,如可以通过if判定语句来避免对年龄进行赋值时输入了字符而出现异常的情况,如使用捕捉异常可以避免除零异常等

(2)关于常见的系统异常:

除零异常(ZeroDiviceError):被除数写成了0

名称异常(NameError):变量未定义

类型异常(TypeError):不同类型数据进行相加

索引异常(IndexError):超出索引范围

键异常(KeyError):没有对应名称的键

值异常(ValueError):将字符型数据转换成整型数据

属性异常(AttributeError):对象没有对应名称的属性

迭代器异常(StopIteration):迭代次数超出迭代器内容个数、

(3)关于python异常的继承关系树图

(4)异常的解决思路

系统内置了很多应用场景,我们在运行程序过程中,一旦触发相关场景,系统就会向外抛出相应的问题,这就是系统抛出的异常

预防:添加容错处理,代码虽会触发异常,但使用容错处理可以不让异常被触发

解决:如果容错代码过多时,会使得整个程序非常混乱,这时可以使用捕捉异常进行处理

解决方案1--捕捉异常的完整机构如下:

注意1:

try:1 / 0print(name)
except ZeroDivisionError as z:print("除零错误")
except NameError as n:print("名字错误")
else:print("代码没错")
finally:print("后续代码执行")
# -------运行结果-------
# 除零错误
# 后续代码执行 

 这里当1 / 0 执行时,出现异常,会跳过print(name)去执行except ZeroDivisionError as z:进行捕捉,从而不会去执行print(name),故后面对其的捕捉也是无效的

注意2:

try:# 1 / 0print(name)
except (ZeroDivisionError, NameError) as z:print("异常")
else:print("代码没错")
finally:print("后续代码执行")
# -------运行结果-------
# 异常
# 后续代码执行

这里如果对多个异常的处理是相同的,则可以将这些异常进行合并处理

注意3:

try:# 1 / 0print(name)
except Exception as z:print("异常")
else:print("代码没错")
finally:print("后续代码执行")
# -------运行结果-------
# 异常
# 后续代码执行

如果不知道具体是什么异常,可以直接使用Exception进行捕捉,因为这些常见的异常都是继承自Exception的

注:except和else语句只执行一个

(8)自定义异常

1) 用户自定义异常首先需要继承Exception类

2) raise语句的语法格式为:

raise [Exception [, args [, traceback]]]

语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。

最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

3)为了能够捕获异常,"except"语句必须有用相同的异常(或者直接抛出Exception)来抛出类对象或者字符串。

4)当类自己定义了__str__(self)方法,那么当raise这个类实例时,就会返回从这个方法中return的数

class Xerror(Exception):def __init__(self, mag, code_error):self.mag = magself.code_error = code_errorpassdef __str__(self):return  self.mag + str(self.code_error)
def ageSet(age):if age <= 0 or age > 200:raise Xerror("不符合", 404)else:print("小明的年龄是%d" % age)
try:ageSet(-18)
except Exception as x:print("cunwu", x)

由于常见异常都是继承自Exception类的,座椅这里可以自定义一个继承了Exception的子类,在向外抛出异常时,即raise Xerror("不符合", 404) ,可以看成是创建一个Xerror实例对象,并对其初始化属性进行赋值,然后利用__str__()方法对实例对象进行描述,这就是自定义异常的方法,在最后可以对抛出的异常进行捕捉

实现异常类,比较好的做法是:将所有自定义异常放在一个单独的文件中(例如:exceptions.py 或 errors.py),许多标准模块也都是这样做的。

既然自定义异常是类,那么它必然可以实现一个普通类能做的所有事情。但一般而言,应该尽量保持简单、简洁。大多数实现都是声明一个自定义基类,并从这个基类派生出其他的(由程序引发的)异常类。这是 Python 中实现自定义异常的标准方法,但并不仅限于这种方式。

总结:

  • 自定义异常类需要继承自Exception类。
  • 自定义异常类需要实现__str__方法来定义需要抛出的异常信息。
  • raise语句主动抛出异常。
  • 捕获异常需要通过try...except 语句,其中"except"语句必须有用相同的异常(或者直接抛出Exception)来抛出类对象。

参考自https://blog.csdn.net/zx870121209/article/details/81477329

https://blog.csdn.net/qq_35462323/article/details/91418650?biz_id=102&utm_term=python%20%E8%87%AA%E5%AE%9A%E4%B9%89%E5%BC%82%E5%B8%B8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-91418650&spm=1018.2118.3001.4187

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

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

相关文章

什么是python标识符_Python:标识符Identifier

什么是标识符&#xff1f; 标识符 (ldentifier) :是一个用来标识变量、函数、类、模块或其他对象的名称。 标识符规范 1&#xff09;标识符由字母、下划线和数字组成 2&#xff09;不能以数字开头 3&#xff09;区分大小写 4&#xff09;不能使用关键字 命名规则 1、见名知意。…

springboot security 权限校验_十二、SpringBoot 优雅的集成Spring Security

前言至于什么是Spring security &#xff0c;主要两个作用&#xff0c;用户认证和授权。即我们常说的&#xff0c;用户只有登录了才能进行其他操作&#xff0c;没有登录的话就重定向到登录界面。有的用户有权限执行某一操作&#xff0c;而有的用户不能执行则是授权。算是一个项…

python-week5

1、现在有如下流程&#xff1a;A->B->C->D->E->F&#xff0c;要求根据输入的参数从制定的流程执行下去 """ File: 01流程执行.py Author: chde_wang Date: 2020-08-16 18&#xff1a;51&#xff1a;35 Description:将输入存储到列表中&#xf…

excel学习1-查看一列数值是否在另一列中存在

出现次数用COUNTIF 是否出现使用 IFCOUNTIF 加入$的作用是将需要比对的列固定范围。写好一个函数后&#xff0c;使用右下角号&#xff0c;直接下拉就可以。 参考自https://blog.csdn.net/gywtzh0889/article/details/72910377

fx5u以太网通讯设置_操作示例 | 实现S7300和FX5U的数据交换

北辰BCNet-S7300Plus(以下简称BCNet)&#xff0c;在BCNet-S7300的基础上&#xff0c;以太网口增加了支持与西门子带网口PLC(S7-200SMART 、S7-1200、S7-1500、S7300PN)之间的通讯功能。这些通讯功能包括基于S7TCP协议的数据交换、ModbusTCP服务器功能、ModbusTCP客户机功能&…

excel基础-固定某一列的输入内容

Office&#xff1a;需要固定的单元格-点击数据-数据有效性-点击&#xff0c;选择有效性条件 允许为&#xff1a;序列&#xff0c;然后需要下拉框内容&#xff0c;并选择下拉框。即可 切记&#xff1a;开源中的逗号为英文逗号。 最后效果如下&#xff1a; 参考自https://jingya…

为什么多个线程不可能同时抢到一把锁_HFL Redis_12_redis分布式锁的3种实现方式...

HotFrameLearning(简称 HFL) Redis_12_redis分布式锁的3种实现方式-一、大致介绍1、昨天介绍完redis的数据结构后&#xff0c;有小伙伴让本人讲讲redis的分布式锁&#xff0c;因此才有了此篇的由来&#xff0c;只是把我的节奏提前了而已&#xff1b;2、接下来我就通过几种方式介…

linux下mysql5.7修改密码

开始修改MySQL用户密码 ① 输入use mysql回车&#xff1b; ② 输入update user set password password(“147258”)where user’root’; “147258”为你自己设置的密码&#xff1b; 执行第二步后如果报错&#xff1a; 执行后报错  ERROR 1…

react项目中的参数解构_重构复杂的React组件:编写高效且可读组件的5个最佳实践...

随着 React.js 的不断进化&#xff0c;现在的它已经成为 Web 组件中最受欢迎的视图库之一。但是你手中的它&#xff0c;是否真的能够正常工作呢&#xff1f;本文将主要描述 5 个关于React 组件的最佳实践&#xff0c;希望对正在关注 React 组件的你有所帮助。我自己是一名从事了…

robotFramework-ride使用1-关键字驱动与数据类型

RF项目结构 项目文件夹&#xff08;new project&#xff09; 用例集&#xff08;test suit&#xff09; 测试用例&#xff08;test case&#xff09; RF基本功能-设置区介绍 项目 --》settings----》Document&#xff1a;添加用例说明 suit setup&#xff1a;执行此测试套件…

opencv threshold_基于深度学习OpenCV与python进行字符识别

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达当我们在处理图像数据集时&#xff0c;总是会想有没有什么办法以简单的文本格式检索图像中的这些字符呢&#xff1f;今天我们就一起看看有没有什么简单的办法可以实现这一…

python3 robotframework+pycharm框架搭建

1.安装python3 框架组成&#xff1a;自动化基础库&#xff08;robotframework&#xff09;图形界面&#xff08;robotframework-ride&#xff09; 2.安装RF框架 安装robotframework。pip install robotframework -i https://pypi.doubanio.com/simple 安装robotframework-r…

delphi if多个条件_判断(if)语句

判断&#xff08;if&#xff09;语句目标开发中的应用场景if 语句体验if 语句进阶综合应用01. 开发中的应用场景生活中的判断几乎是无所不在的&#xff0c;我们每天都在做各种各样的选择&#xff0c;如果这样&#xff1f;如果那样&#xff1f;……程序中的判断if 今天发工资: ​…

excel sheet限制_Python 处理Excel内的数据(案例介绍*3)

点击上方“蓝字”关注我们了解更多精彩案例一介绍现在有一批电商产品跟当日销量的数据&#xff0c;如下&#xff0c;总共有上万笔的数据&#xff0c;现在需要统计每个品牌当日的销售量&#xff0c;比如美宝莲今天总共卖出了多少的商品&#xff0c;另外需要统计每个品牌下面的每…

robotFramework-ride使用2-分支与循环

1条件运算 Run keyword if 如果条件为True&#xff0c;则执行关键字 ELSE IF ELSE IF使用案例1&#xff1a; 2循环 在使用append to list前&#xff0c;添加Collections库 列表元素添加与删除 列表元素求和-循环 :FOR ${i} IN 1 2 3 4 5 :FOR ${i} IN RANGE 1 5FOR里面…

项目案例:在线拍卖系统_冀拓公司在张家口开展尾矿库在线监测监控系统 建设项目...

近日&#xff0c;受张家口弘锦矿业有限责任公司委托&#xff0c;冀拓公司在弘锦矿业大东沟尾矿库开展了安全风险智能在线监测监控系统施工安装服务。由于该库为“头顶库”&#xff0c;按照省应急管理厅要求“头顶库”必须在6月底之前完成联网&#xff0c;在6月24日接到项目任务…

Linux 两台服务器之间传输文件和文件夹

今天处理一个项目要迁移的问题&#xff0c;突然发现这么多图片怎么移过去&#xff0c;可能第一时间想到的是先从这台服务器下载下来&#xff0c;然后再上传到另外一台服务器上面去&#xff0c;这个方法确实是可行&#xff0c;但是实在是太费时间了&#xff0c;今天我就教大家怎…

arm汇编指令集_1. 从0开始学ARM安装Keil MDK uVision集成开发环境

关于ARM的一些基本概念&#xff0c;大家可以参考我之前的文章&#xff1a;《0.到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc&#xff1f;一文帮你梳理基础概念【科普】》0. 如何学习arm&#xff1f;ARM的知识点很多很杂&#xff0c;很多同学都遇到过类似的问题&#xff0…

32位存储环境下整数范围为什么是[-2^31,2^31-1]?

一、概念&#xff1a;存储单位 1.“位”是数据存储的最小单位。在计算机中的二进制数系统中&#xff0c;位&#xff0c;简记为bit,也称为比特&#xff0c;每个0或1就是一个位。 2.“字节”是计算机信息技术用于计量存储容量的一种计量单位&#xff0c;通常情况下&#xff0c;…

mysql5.7配置用户名密码_MySQL57安装图解

原文&#xff1a;MySQL57安装图解_ma524654165的博客-CSDN博客作者&#xff1a; ma524654165MySQL57安装图解、、、0-需要准备的安装包1在百度下载MySQl开始安装下载的MySQL勾选同意点击Next4选择Server only5点击execute继续6点击next7直接next8配置服务器的端口-默认9设置一个…