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 相关文章推荐
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
python实现超市扫码仪计费
May 30 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
Numpy 理解ndarray对象的示例代码
Apr 03 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
利用Python批量识别电子账单数据的方法
Feb 08 Python
Python爬取某平台短视频的方法
Feb 08 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
PHP+ajax 无刷新删除数据
2010/02/20 PHP
PHP禁止页面缓存的代码
2011/10/23 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
21个值得收藏的Javascript技巧
2014/02/04 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
Vue 实用分页paging实例代码
2017/04/12 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
[01:29]2014DOTA2展望TI 剑指西雅图DK战队专访
2014/06/30 DOTA
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
Python实现建立SSH连接的方法
2015/06/03 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
matplotlib绘制动画代码示例
2018/01/02 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
TensorFlow使用Graph的基本操作的实现
2020/04/22 Python
意大利大型购物中心:Oliviero.it
2017/10/19 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
医学生自荐信范文
2013/12/03 职场文书
小学开学寄语
2014/01/19 职场文书
电力安全事故反思
2014/04/27 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python