一、断言

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

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中常见的异常

常见异常

四、异常处理 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日,第一次更新,优化内容

python异常处理_Python入门 断言与异常处理相关推荐

  1. python程序异常处理_python中程序的异常处理

    什么叫异常? 导致程序异常退出叫做异常 try...except...else 如果要抓取某种特定异常可以用except ERROR as e else:如果程序正常执行那么会执行else里面的代码 ...

  2. 〖Python零基础入门篇㊸〗- 异常处理的避坑指南

    万叶集

  3. python 指针_python入门指针

    这篇文章主要记录了我自学python的经历和一些比较有效的方式方法,对于还在门外撞墙的同学来说还是很有帮助的. 自学之初 当初想学习python是因为18年夏天,我参与的创业公司处于一个快速发展阶段, ...

  4. 为什么金融分析需要应用python语言_python入门第一篇:python语言简介

    四.Python发展史 1989年,Guido开始写Python语言的编译器. 1991年,第一个Python编译器诞生.它是用C语言实现的,并能够调用C语言的库文件.从一出生,Python已经具有了 ...

  5. python版本更新_python入门学习第一天-初识Python

    初识Python Python简介 Python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器. 1991年2月:第一个Python编译器(同时也是解释器)诞 ...

  6. python 图表_Python入门学习系列——使用Python调用Web API实现图表统计

    使用Python调用Web API实现图表统计 Web API:Web应用编程接口,用于URL请求特定信息的程序交互,请求的数据大多以非常易于处理的格式返回,比如JSON或CSV等. 本文将使用Pyt ...

  7. 如何安装python环境_python入门第一步:如何安装Python和搭建Python环境?

    原标题:python入门第一步:如何安装Python和搭建Python环境? 很多想入门Python的小伙伴,在第一步安装Python上就放弃了.从入门到放弃速度之快也是令人吃惊!今天就和大家一起从最 ...

  8. 可以单独打开anaconda中的python莫?_Python入门必备,大数据,人工智能编程必备软件-Anaconda...

    如果说通用的编程神器是微软的VS Code,那么Python编程必备神器是Anaconda 适用人群:Python编程入门新手,大数据分析工作者,人工智能工作者,创投,金融分析师等 适用平台:Wind ...

  9. 最新版python教程_Python入门教程完整版(懂中文就能学会)

    前几天给大家分享视频<python基础教程>受到了广泛的关注,有人不知道怎么领取,居然称小编为"骗子". 不过小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今 ...

最新文章

  1. P2762 太空飞行计划问题
  2. DSP、ARM和单片机的区别
  3. 浏览器自带的前进后退按钮禁用
  4. php连接mysql学习过程中遇到的各种问题总结
  5. Linux操作系统的权限代码分析【转】
  6. 拓端tecdat|使用R语言对进行地理空间数据可视化
  7. 软件工程~~判定树和判定表
  8. Win10的Flash不能运行,报错——“暴力”解法
  9. Acrel-2000T无线测温产品方案介绍(安科瑞-须静燕)
  10. 使用QGIS制作专题地图——上海市游泳馆分布地图
  11. 【wmi】C++获取windows激活状态
  12. vscode中怎样格式化js代码_vsCode配置代码格式化
  13. 西门子1200PLC和Modbus485从站设备通讯
  14. 2022年中国科学技术大学细胞生物III复习资料
  15. ReactNative开发——RN与android Native交互初探
  16. 独立开发变现周刊(第82期):开发一个在线PDF编辑器,年收入50万美元
  17. Ubuntu+Pytorch开发入门整理——环境搭建
  18. siki Unity - A计划 视频
  19. 软件测试的发展趋势怎么样?
  20. 微信营销可以用来做什么?

热门文章

  1. 西门子主程序调用子程序_S7200Smart 子程序局部变量使用教程
  2. python socketio async client_electron/socket.io client-python socketio/aiohttp server//连接失败
  3. 【转】Windows Server 2012 R2 双网卡绑定
  4. 蜗牛星际 --【功耗测量】
  5. ROS中常见坐标系定义及基本单位
  6. linux中sybase删除数据库,Linux_Sybase ASE数据库的常见问题解答,1 数据库占用磁盘空间的形式 - phpStudy...
  7. 广州计算机自考独立办学,广东省06年自学考试独立办班广州考点办学计划的通知...
  8. node工程默认url_node命令行工具之实现项目工程自动初始化的标准流程
  9. Hbase搭建-基于hadoop3--并且解决了hbase error: KeeperErrorCode = NoNode for /hbase/master错误
  10. PWN-COMPETITION-GeekChallenge2021