《python学习手册》第32章 异常基础
发生异常与默认的异常处理
def fun(a,b):
return a[b]
print(fun('nihao',20))
会出现异常,异常信息一般是这样的
Traceback (most recent call last):
File "D:\application\eclipse\workspace\yichang\c1\test1.py", line 8, in <module>
print(fun('nihao',20))
File "D:\application\eclipse\workspace\yichang\c1\test1.py", line 7, in fun
return a[b]
IndexError: string index out of range
捕获异常和异常恢复
def fun(a,b):
return a[b]
try:
fun('nihao',20)
except IndexError:
print('nihao')
运行以后的结果是: nihao
def fun(a,b):
return a[b]
try:
fun('nihao',20)
except IndexError:
print('nihao')
print('dajiahao')
这个时候运行结果如下:
nihao
dajiahao
说明我们后面的代码能够正常运行。try代码块执行时触发异常,python会自动跳至处理器。处理以后,程序继续向后进行,这样当我们的代码出现异常的时候我们的程序就不会终止了。
引发异常
除了上面程序运行当中出现的异常,我们可以自己引发异常,比如使用raise
try:
raise IndexError
except IndexError:
print('got indexerror')
运行结果如下: got indexerror
除了raise以外,assert可以用来触发异常--它是一个有条件的raise
用户定义异常
我们可以自己定义自己的异常类,通过继承一个内置的异常类,通常为Exception。基于类的异常允许脚本建立异常类型,继承行为以及附加状态信息。 例如,运行下面的代码:
class Bad(Exception):
pass
try:
raise Bad()
except Bad:
print('Bad Exception')
将会得到结果: Bad Exception
终止行为
在try后面除了跟except异常处理器以外,还可以跟finally,与except不同的是,可以定义一定会在执行时收尾的行为,无论try代码块中是否发生异常。
当try代码块中有异常时:
def fun(a,b):
return a[b]
try:
fun('hello',20)
finally:
print('finally excute')
print('fun excute?')
执行的结果如下:
finally excute
Traceback (most recent call last):
File "D:\application\eclipse\workspace\yichang\c1\finally.py", line 9, in <module>
fun('hello',20)
File "D:\application\eclipse\workspace\yichang\c1\finally.py", line 7, in fun
return a[b]
IndexError: string index out of range
可以看到,try中发生异常,最终执行了finally里面的语句,但是try-finally之后的语句是不被执行的,这是因为,异常发生时,控制权在try-finally代码块后中断了。python跳回去执行finally的行为,然后把异常向上传播到前一个处理器(在这个例子中,为顶层的默认处理器)。
当try代码块没有异常的时候:
def fun(a,b):
return a[b]
try:
fun('hello',3)
finally:
print('finally excute')
print('fun excute?')
运行结果如下:
finally excute
fun excute?
可以看到,无论如何finally 里面的代码都会被执行。
python还提供了一种try-finally的一种替代:with-as语句。
总结一下:
《python学习手册》第32章 异常基础的更多相关文章
- Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘
Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...
- Python学习手册(第4版)PDF高清完整版免费下载|百度云盘
Python学习手册(第4版)PDF高清完整版免费下载|百度云盘 提取码:z6il 内容简介 Google和YouTube由于Python的高可适应性.易于维护以及适合于快速开发而采用它.如果你想要编 ...
- 《Python学习手册 第五版》 -第16章 函数基础
前面的章节讲解的是一些基础数据类型.基本语句使用和一些文档查看的内容,这些都是一些基础,其实还谈不上入门,只有了解了函数,才算入门 函数是编程里面使用最多的也是最基本的程序结构, 本章重点内容 1.函 ...
- 《Python学习手册 第五版》 -第14章 迭代和推导
承接上一章for循环的讲解,迭代和推导,是对for循环的一种深入的探索和扩展 本章重点内容 1.迭代 1)什么是迭代?都有哪些分类 2)常规的使用方法 3)多遍迭代器VS单遍迭代器 2.列表推导 1) ...
- 《Python学习手册 第五版》 -第13章 while循环和for循环
上一章已经讲过if条件语句,这章重点是循环语句:while.for 本章的重点内容 1.while循环 1)一般形式 2)break.continue.pass和循环的else 2.for循环 1)一 ...
- 《Python学习手册 第五版》 -第11章 赋值、表达式和打印
上一章对Python的语句和语法已经进行了基本的说明,接下来就是每个章节的详细说明,本章的主要内容就是标题中涵盖的三点:赋值语句.表达式语句.打印语句 本章重点内容如下: 1.赋值语句 1)赋值语句的 ...
- 《Python学习手册 第五版》 -第10章 Python语句简介
前面在开始讲解数据类型的时候,有说过Python的知识结构,在此重温一下 Python知识结构: 程序由模块组成 模块包含语句 语句包含表达式 表达式创建并处理对象 关于知识结构,前面已经说过我自己的 ...
- 《Python学习手册 第五版》 -第18章 参数
在函数的定义和调用中,参数是使用最多喝最频繁的,本章内容就是围绕函数的参数进行讲解 本章重点内容如下: 1.参数的传递 1)不可变得参数传递 2)可变得参数传递 2.参数的匹配模式 1)位置次序:从左 ...
- 《Python学习手册 第五版》 -第15章 文档
本章主要介绍Python中的文档,会通过多种方式来说明,如果查看Python自带文档和其他参考的资料 本章重点内容 1.#注释:源文件文档 2.dir函数:以列表显示对象中可用的属性 3.文档字符串 ...
随机推荐
- linux设置时区同步时间
linux设置时区同步时间 一.运行tzselect sudo tzselect 在这里我们选择亚洲 Asia,确认之后选择中国(China),最后选择北京(Beijing) 如图: 二.复制文件 ...
- 不老的神器:安全扫描器Nmap渗透使用指南【转】
介绍 nmap是用来探测计算机网络上的主机和服务的一种安全扫描器.为了绘制网络拓扑图Nmap的发送特制的数据包到目标主机然后对返回数据包进行分析.Nmap是一款枚举和测试网络的强大工具. 特点 主机探 ...
- 设置网卡IP,还每次都挨个地址输入吗?批处理一下【转】
1.设置网卡ip,子网掩码和默认网关,注意修改网卡名称,跟本地连接汇总的网卡名称保持一直 netsh interface ip set address "以太网" static 1 ...
- UIScrollViewDelegate 方法调用
UIScrollViewDelegate 方法调用 /** 设置缩放的View, 初始化完之后调用此方法告诉scrollView 谁可以缩放操作, 然后进行布局 */ func viewForZoom ...
- 调用HTMLTestRunner生产的报告内容为空解决办法
开始代码如下,生成报告内容为空: #coding=utf-8 import unittest,time,reimport requestsimport jsonimport HTMLTestRunne ...
- 第一天开始使用Oracle
上半年虽然已经学习了Oracle,但是基本上实验课都没怎么实践过,感觉自己之前过得太水了! 在我的印象里,Oracle 的难度相当于工程师的建设一个亚洲最大的医院一样,也如医生的99%失败率的手术: ...
- Windows: 如何配置IPv6隧道
清空隧道配置: netsh interface ipv6 set teredo disable netsh interface ipv6 6to4 set state disable netsh in ...
- HDU 2594 Simpsons’ Hidden Talents(KMP求s1前缀和s2后缀相同部分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594 题目大意:给两串字符串s1,s2,,找到最长子串满足既是s1的前缀又是s2的后缀,输出子串,及相 ...
- HDU 1043 Eight(反向BFS+打表+康托展开)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 题目大意:传统八数码问题 解题思路:就是从“12345678x”这个终点状态开始反向BFS,将各 ...
- AXFR和IXFR区域传输及原理
由于区域在DNS中发挥着重要的作用,因此希望在网络上的多个DNS服务器中提供区域,以提供解析名称查询时的可用性和容错.否则,如果使用单个服务器而该服务器没有响应,则该区域中的名称查询会失败.对于主要区 ...