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定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
常见的python正则用法实例讲解
Jun 21 Python
python如何修改装饰器中参数
Mar 20 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
python3 pygame实现接小球游戏
May 14 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
Pytorch中.new()的作用详解
Feb 18 Python
Python3监控疫情的完整代码
Feb 20 Python
Python reversed函数及使用方法解析
Mar 17 Python
Python urllib2运行过程原理解析
Jun 04 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
Jun 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
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
用js做一个小游戏平台 (一)
2009/12/29 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
webpack的CSS加载器的使用
2018/09/11 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
使用Python编写提取日志中的中文的脚本的方法
2015/04/30 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
2019/12/25 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
Python如何实现FTP功能
2020/05/28 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
AmazeUI的下载配置与Helloworld的实现
2020/08/19 HTML / CSS
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
保安岗位职责
2014/02/21 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers