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 相关文章推荐
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
Jul 04 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
Python读取YAML文件过程详解
Dec 30 Python
keras获得model中某一层的某一个Tensor的输出维度教程
Jan 24 Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 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守护另一个php进程的例子
2015/02/13 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
php实现微信扫码支付
2017/03/26 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
windows系统php环境安装swoole具体步骤
2021/03/04 PHP
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
Javascript中的方法和匿名方法实例详解
2015/06/13 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
python 使用shutil复制图片的例子
2019/12/13 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
keras 多gpu并行运行案例
2020/06/10 Python
RetroStage德国:复古服装
2019/02/03 全球购物
中国电子产品批发商/跨境电商/外贸网:Sunsky-online
2020/04/20 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
办公室主任主任岗位责任制
2014/02/11 职场文书
合作协议书
2014/04/23 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
2014年妇联工作总结
2014/11/21 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏