python异常处理_Python入门 断言与异常处理

一、断言

断言,可以理解为判断是否断开的预言。

assert  表达式 , 描述

表达式为我们的预期结果,当表达式的结果为False时,抛出 AssertionError 异常,如无异常捕获程序遇到异常时直接结束运行。反之,表达式结果为True 程序继续向下运行。

我们何时使用断言?

断言需要慎用,尤其是写测试用例或者程序时,因为我们运行程序时,如果断言失败,无异常捕获程序则会结束运行,导致后面的代码无法执行。

断言一般用在防御型的编程、运行时检查程序逻辑、检查约定、程序常量、检查文档时,在从来不会运行失败的代码不必要加上断言。

示例1.1:当pi值对修改抛出异常

class 

输出结果:

Traceback (most recent call last):assert self.pi == Circle.pi, 'pi 值被修改'
AssertionError: pi 值被修改

示例1.2:

assert 

二、语法错误与异常的区别

语法错误:或者称之为解析错,程序无法解析或者编译

1、语法错误:代码不符合解释器或编译器的语法,如:print()输出单词出错

2、逻辑错误:不完成或者不合法的输入或者计算机出问题,如:死循环

异常:执行过程中出现问题导致程序无法执行

1、程序遇到逻辑或者算法问题,如:1/0

2、运行过程中计算机错误,如:内存不够或者IO错误

异常出现的过程:

1、异常产生,检查到错误且解释器认为是异常,抛出异常

2、异常处理,截获异常,忽略或者终止程序处理异常

总结:异常都可以是错误,但是错误不一定是异常

三、异常

运行期间检测到的错误被称为异常,大多数的异常都不会被程序处理,都以错误信息的形式展现。

如下:

>>>1/0
Traceback (most recent call last):File "<input>", line 1, in <module>
ZeroDivisionError: division by zero
>>>4+a*5
Traceback (most recent call last):File "<input>", line 1, in <module>
NameError: name 'a' is not defined
>>>'2'+2
Traceback (most recent call last):File "<input>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly

异常以不同的类型出现,这些类型都作为信息的一部分打印出来。如上面例子中的类型有ZeroDivisionError,NameError 和 TypeError异常。

错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。

Python中常见的异常

37d3697e3d799971f18003df9e08b53e.png
常见异常

四、异常处理 try...except...else...finally...

怎么捕获异常,并处理?

我们捕获异常使用 try ... except ...,try 与 except 之间是可能会发生异常的语句块,而 except 下的语句块是当异常发生后我们进行处理的语句块。

示例 4.1:

while 

运行程序:

接收一个除数:1
2.0
接收一个除数:0
发生了异常
接收一个除数:2a
发生了异常

如上,当我们输入0发生了异常,输入2a也发生了异常,因为int()无法将2a转换为int,而且两种异常类类型不同。

怎么捕获特定的异常?

在 except 后加入异常类型,就可以捕获特定的异常,也可以一次性捕获多个异常,如下示例4.2

示例4.2:

while 

运行程序:

接收一个除数:0
发生了ZeroDivisionError异常
接收一个除数:a
发生了ValueError或KeyboardInterrupt或TypeError异常

except 后语句只在发生异常后才执行,那么有没有当异常没有发生时我们才进行处理的语句?

有,try ... except ... else ...,else 后的语句块是当异常没有发生后才会执行。

示例4.3:

while 

运行程序:

接收一个除数:0
发生了ZeroDivisionError异常
接收一个除数:1
2.0
结束程序运行

如上运行结果,else只有在没有发生异常的时候运行。

异常发生可以处理,异常没发生也可以处理,那么有没有不管是否发生异常都进行处理的语句?

有try ... except ... finally ...,finally 下的语句块不管有没有发生异常都会执行。

示例4.4:

while 

运行程序:

接收一个除数:1
2.0
执行了finally语句块
接收一个除数:0
发生了ZeroDivisionError异常
执行了finally语句块

如上 finally 下的语句块,不管有没有出现异常都会执行。

try ... except ... else ... finally ... 的使用顺序

try ... except ... else ... finally...使用顺序,else 必须在 except 后 finally 前,finally 只能在最后;else 与 finally 可有可无。

语法上 except 也可以缺少,不过少了except就不能捕获异常,没人会这样写代码。

try

五、抛出异常 raise

Python 可以使用 raise 语句抛出一个指定的异常

raise 

raise 唯一的一个参数是指定要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

示例:

raise 

输出结果:

Traceback (most recent call last):raise NameError('使用一个还未赋值对象的变量')
NameError: 使用一个还未赋值对象的变量

try ... except ... finally ... 使用场景

try ... except ... finally ... 是非常常用,主要用于如关闭数据库连接,文件关闭,释放线程锁等。

fo 

附件:异常类列表

来自官方文档:5. Built-in Exceptions

BaseException+-- SystemExit+-- KeyboardInterrupt+-- GeneratorExit+-- Exception+-- StopIteration+-- StopAsyncIteration+-- ArithmeticError|    +-- FloatingPointError|    +-- OverflowError|    +-- ZeroDivisionError+-- AssertionError+-- AttributeError+-- BufferError+-- EOFError+-- ImportError+-- ModuleNotFoundError+-- LookupError|    +-- IndexError|    +-- KeyError+-- MemoryError+-- NameError|    +-- UnboundLocalError+-- OSError|    +-- BlockingIOError|    +-- ChildProcessError|    +-- ConnectionError|    |    +-- BrokenPipeError|    |    +-- ConnectionAbortedError|    |    +-- ConnectionRefusedError|    |    +-- ConnectionResetError|    +-- FileExistsError|    +-- FileNotFoundError|    +-- InterruptedError|    +-- IsADirectoryError|    +-- NotADirectoryError|    +-- PermissionError|    +-- ProcessLookupError|    +-- TimeoutError+-- ReferenceError+-- RuntimeError|    +-- NotImplementedError|    +-- RecursionError+-- SyntaxError|    +-- IndentationError|         +-- TabError+-- SystemError+-- TypeError+-- ValueError|    +-- UnicodeError|         +-- UnicodeDecodeError|         +-- UnicodeEncodeError|         +-- UnicodeTranslateError+-- Warning+-- DeprecationWarning+-- PendingDeprecationWarning+-- RuntimeWarning+-- SyntaxWarning+-- UserWarning+-- FutureWarning+-- ImportWarning+-- UnicodeWarning+-- BytesWarning+-- ResourceWarning

2020年4月16日,第一次更新,优化内容

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

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

相关文章

百度关键词排名查询源码_章丘百度霸屏总部,关键词排名腾沃云

上海保沃腾沃云为您详细解读URiIr章丘百度霸屏总部的相关知识与详情&#xff0c;做网站SEO优化文章内容优化效果已经十分明显。内容的量量关于网站的整体量量很重要。通过关键字阐发&#xff0c;陈某们晓得需要环绕关键字编写网页。使您的内容的重要根底是您对网页筹算描述的卖…

密码学专题 数据填充的方式|序列加密的方式

电子密码本模式和加密分组链接模式的分组算法都要求加密输入的分组是固定长度 的&#xff0c;但是大多数输入明文可能都不是分组长度的整数倍&#xff0c;也就是说&#xff0c;最后一个分组一般来 说是不足一个分组长度的。为了使分组加密算法能够正常工作&#xff0c;通常使用…

win10此电脑不见了_教程 | win10总提示“你要允许此应用对电脑的修改吗”,如何关闭?...

在使用电脑的时候&#xff0c;你是否曾遇到过这样的情况&#xff0c;点击打开软件的时候&#xff0c;系统总是提示我们“你要允许此应用对你的设备进行修改吗&#xff1f;”难道是软件中病毒了吗&#xff1f;&#xff0c;这其实上并没有什么用处&#xff0c;只是系统无法判断软…

密码学专题 加密模式的选择|传输数据加密

分组加密模式和序列加密模式。它们之间最大的区 别在于分组加密模式每次对一组数据进行加密运算处理&#xff0c;而序列加密模式则逐位对数据进 行加密运算处理。事实上&#xff0c;在实际设计应用的算法中&#xff0c;并没有那么严格的区别&#xff0c;它们有可能是相互结合的…

微信公众号数据2019_2019年9月原创公众号排行榜数据报告出炉

西瓜数据发布 2019 年 9 月原创公众号排行榜&#xff0c;分别从西瓜指数、原创文章占比、周期内公众号发文次数、发文篇数、总阅读数、头条平均阅读数等方面展示公众号数据。榜单说明1、涉及榜单本期月榜截取 ①财经、②教育、③娱乐、④科技、⑤体育、⑥游戏、⑦文化、⑧美食、…

密码学专题 OpenSSL专题

OpenSSL总体架构 软件包分为三个主要的功能部分&#xff1a;密码算法库 、 SSL协议库及应用程序 MacOS&#xff0c;MS&#xff0c;OS/2及 VMS这几个目录&#xff0c;包含了在不同的 平台编译时的环境变量配置文件&#xff0c;在安装编译完成之后&#xff0c;这几个目录就没有作…

java 华氏温度转换为摄氏温度

题目 小明要到美国旅游&#xff0c;可是那里的温度是以华氏度为单位记录的。 它需要一个程序将华氏温度&#xff08;80度&#xff09;转换为摄氏度&#xff0c;并以华氏度和摄氏度为单位分别显示该温度。 公式&#xff1a;华氏温度&#xff08;摄氏温度-32&#xff09;/1.8 M…

hs控什么意思_凡尔赛文学 到底是什么?

点击蓝字关注我们XIE XIE NI DE XI HUAN|| 动漫 情头 耽美 闺蜜 男女头 句子控 壁纸 ||左句 凡尔赛文学野象&#xff1a;老是有人提知不知道凡尔赛文学&#xff0c;说实话我不太清楚网络时下流行的梗&#xff0c;也没有兴趣参与&#xff0c;我还是比较喜欢欧洲古典文学和后现…

密码学专题 openssl编译和安装

Configure 脚本文件 使得OpenSSL可以适应多种不同的系统平台和多达几十种不同的编译器。Configure指令还可以使OpenSSL在编译的时候具备组件的选择功能&#xff0c;比如可以选择支持或者不支持某种算法或者协议等&#xff0c;这使得OpenSSL具有很大的灵活性&#xff0c;比如在…

Python学习12 文件的读写

目标 文件的打开和关闭 mode缺省情况下表示只读r 文件的路径 前面加个r’,代表其中的转义字符不起作用 文件的打开方式 案例&#xff1a;实现文件拷贝的功能 将某一文件夹下的某一文件 保存在当前文件 所在目录。 import os #读取文件1 path./file.txt fileopen(path,…

密码学专题 openssl的基本概念

配置文件 配置文件是OpenSSL的一个基础结构组件&#xff0c;OpenSSL使用一组称为OpenSSLCONF的函数来读取OpenSSL配置文件的信息。OpenSSL提供的主配置文件是opensl.cnf&#xff0c;它集成了OpenSSL所要使用的配置文件选项的大部分内容。此外&#xff0c;OpenSSL还提供了其他一…

该工程中的宏被禁止_建筑劳务分包都能承担什么工程

来源&#xff1a;找法网建筑工程的承包单位&#xff0c;也就是总承包单位可以将部分建造工程分包给具有资质的施工单位&#xff0c;这是法律所允许的&#xff0c;但是禁止将建造工程进行转包。一、建筑劳务分包都能承担什么工程建筑劳务分包能承担什么工程要看分包单位的资质&a…

matlab用辛普森公式求积分_积分近似计算之辛普森公式

对于积分区间[a, b]&#xff0c;若则成立辛普森公式辛普森公式可看作是改良的梯形公式。梯形公式是以直线逼近实际曲线&#xff0c;而辛普森公式则以二次曲线(即抛物线)逼近。以二次曲线逼近实际曲线根据辛普森公式可得各积分小区间内的积分值如下式所示&#xff1a;其中于是&a…

密码学专题 文件编码格式

OpenSSL中虽然使用PEM作为基本的文件编码格式&#xff0c;但是&#xff0c;由于不同的对象其封装的标准格式不太一样&#xff0c;所以经常会导致读者产生迷惑。此外&#xff0c;OpenSSL也支持DER编码和过时的Netscape编码格式(NET)OpenSSL的编码是基于ASN.1标准的&#xff0c;A…

echarts 折线图 设置y轴最小刻度_【硬货】vue全家桶+Echarts+百度地图,搭建数据可视化系统...

作者丨夙言来源丨前端大牛爱好者(Web-2017)https://segmentfault.com/a/1190000018993981本文章篇幅略长&#xff0c;内容有点多&#xff0c;大佬可根据目录选择性查阅&#xff0c;新人可一步步来阅读。1、 前言1.1 业务场景突然接到产品说要做一个数据监控的系统。有线图、柱状…

密码学专题 文本数据库

应用概述 文本数据库是跟OpenSSL的CA应用程序紧密结合在一起的&#xff0c;它以文本的方式记录CA已经签发的证书的状态和摘要信息。这些状态信息可以用于跟证书库相关的一些操作&#xff0c;比如使用ca指令生成CRL主要就是读取这个文本数据库的信息作为参考。文本数据库就是普…

Python学习13 异常处理机制

概括 常见的异常 异常处理机制 可以多个异常放在元组里面 一旦产生异常&#xff0c;try后面的语句不会继续执行&#xff0c;会做异常处理 异常使用场景1 close应该放在finally中 异常使用场景2 finally关键字 会执行except后面的&#xff0c;报错

java 布隆过滤器_牛逼哄哄的布隆过滤器,到底有什么用?

Java技术栈www.javastack.cn打开网站看更多优质文章作者&#xff1a;CodeBear的园子www.cnblogs.com/CodeBear/p/10911177.html本文是站在小白的角度去讨论布隆过滤器&#xff0c;如果你是科班出身&#xff0c;或者比较聪明&#xff0c;又或者真正想完全搞懂布隆过滤器的可以移…

Java web后端6 java Bean EL表达式

EL表达式和JSTL概述 java Bean规范 java中成员变量使用类Integer private Integer count; java Bean的创建 创建java Bean: BookTest.java package com.example.elandjstl.bean;public class BookTest {//java中成员变量使用类Integerprivate Integer count;private Boolean…

python根须系统斜杠_深入浅出Python中的os模块

「Author&#xff1a;Runsen」当初学Python的时候&#xff0c;把一些标准库和第三方开源库学的七零八落&#xff0c;不成系统&#xff0c;正好趁这个机会来系统的整理一下&#xff0c;先从Python常用的标准库os开始吧。osOS模块简单的来说它是一个Python的系统编程的操作模块&a…