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程序中自定义异常的方法
Oct 16 Python
Python的Flask框架的简介和安装方法
Nov 13 Python
numpy自动生成数组详解
Dec 15 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
Jun 21 Python
python之PyQt按钮右键菜单功能的实现代码
Aug 17 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
python 利用zmail库发送邮件
Sep 11 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
如何用Python进行时间序列分解和预测
Mar 01 Python
浅谈Python数学建模之整数规划
Jun 23 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读取大文件示例分享(文件操作类)
2014/04/13 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
善用事件代理,警惕闭包的性能陷阱。
2011/01/20 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
jQury Ajax使用Token验证身份实例代码
2017/09/22 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
用js编写留言板
2020/03/17 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
2016/10/08 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
python模块之re正则表达式详解
2017/02/03 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
一篇.NET面试题
2014/09/29 面试题
应届生人事助理求职信
2013/11/09 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
入党积极分子党支部意见
2015/06/02 职场文书
离职信范文
2015/06/23 职场文书
升学宴学生致辞
2015/07/27 职场文书
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python