Python中的异常处理相关语句基础学习笔记


Posted in Python onJuly 11, 2016

异常是指因为程序出现了错误而在正常控制流以外采取的行动,其分为两个阶段,第一阶段是引发异常的错误,当系统检测到错误并且意识到异常条件,解释器(也可以是程序员引发异常)会引发一个异常通知前段控制流有错误发生,对异常的处理发生在第二阶段,异常引发后,可以调用很多不同的操作,可以是忽略错误,或是记录错误但不采取任何措施,采取补救措施后终止程序,或是江青问题的影响后设法继续执行程序
 类似Python这样支持引发和处理异常的语言,可以让开发人员在错误发生时不仅有检测错误的能力,还可以采取更可靠的补救措施。
 Python用异常对象(exception object)来表示异常情况,遇到错误后,引发的异常如果未被处理或捕捉,程序会自动调用回溯(Traceback)终止执行

>>> 1/0
Traceback (most recent call last):
 File "", line 1, in
ZeroDivisionError: integer division or modulo by zero
>>>

 
python中的异常
python解释器检测的异常如:
1) NameError: 尝试访问一个未声明的变量
2)ZeroDivisionError: 除数为零
3)SyntaxError:Python语法错误
4)IndexError: 请求的索引超出序列范围
5)KeyError:请求一个不存在的字典关键字
6)IOError: 输入/输出错误
7)AttirbuteError: 尝试访问未知的对象属性
8)TypeError:在内建操作或者函数 应用于错误类型的对象时引发
9)ValueError: 在内建操作或者函数 应用于正确类型的对象,但对该对象引用不合适的值引发
 
由程序员明确触发异常:
raise语句:

raise [someException [, args [, traceback]]]

 
检测和处理异常
异常可以通过try语句来检测,主要有两种实现形式:try-except 和 try-finally:

try-except 语句
定义了进行异常监控的一段代码,并提供了处理异常的机制

try:
  try_suite #进行监控的代码
except Exception[, reason]:
  except_suite #异常处理的代码
[except Exception2[, reson2]:
  except_suite2 # 处理try语句中可能发生的多种异常
[else:
  else_suite #try中语句执行没有异常被检测到
[finally:
  finally_suite #无论如何均会执行]]]

 
try-finally语句
finally方式的语句并不是用来捕捉异常,而是用来维持一致的行为而无论异常是否发生,无论try中是否有异常触发,finally代码段都会被执行

try:
  try:
    try_suite
  except:
    excetp_suite
finally:
  finally_suite

等效于:

try:
  try_suite
except:
  excetp_suite
finally:
  finally_suite

Assert

Python中assert的运用于C语言中的assert()函数相似,
主要功能在于确保程序中的某个条件一定为真时,才能让程序执行,否则终止程序执行并触发AssertionError错误
其可以视为相对高级点的异常处理
语法:

assert expression1, expression2

(不用小括号)
其中,expression1 表示程序继续执行的判断条件,为真则继续,为假则程序终止,并抛出expression2给出的描述信息

>>> a=10
>>> assert a<=10, "Error"
>>> a = 11
>>> assert a<=10, "Error"
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AssertionError: Error

等价于:

if a>10: raise AssertionError("Error")

说明:
assert语句一般用于程序编写过程中的调试,将其添加到Python源代码中后,未避免影响编译性能,
建议尽量去除assert语句,并将__debug__这个内置变量设置为False,即在运行命令行中添加参数

python -0 test.py

(这其实与C语言中的编译参数-d类似)

Python 相关文章推荐
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
使用Python生成XML的方法实例
Mar 21 Python
python实现的二叉树定义与遍历算法实例
Jun 30 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
python 实现登录网页的操作方法
May 11 Python
pandas DataFrame索引行列的实现
Jun 04 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
Python基于内置库pytesseract实现图片验证码识别功能
Feb 24 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
python 如何区分return和yield
Sep 22 Python
Python编写简单的HTML页面合并脚本
Jul 11 #Python
Python中super()函数简介及用法分享
Jul 11 #Python
Swift中的协议(protocol)学习教程
Jul 08 #Python
Python中多线程的创建及基本调用方法
Jul 08 #Python
使用PyInstaller将Python程序文件转换为可执行程序文件
Jul 08 #Python
Python遍历目录中的所有文件的方法
Jul 08 #Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 #Python
You might like
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
thinkphp实现数组分页示例
2014/04/13 PHP
PHP使用curl_multi_select解决curl_multi网页假死问题的方法
2018/08/15 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
js数组操作常用方法
2014/05/08 Javascript
Javascript中For In语句用法实例
2015/05/14 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
JavaScript实现的简单加密解密操作示例
2018/06/01 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
Python实现中一次读取多个值的方法
2018/04/22 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
2018/06/01 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
行政总监岗位职责
2013/12/05 职场文书
年度考核自我鉴定
2014/02/02 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
Django+Celery实现定时任务的示例
2021/06/23 Python
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python