python学习-异常处理之捕获异常与抛出异常(七)
捕获异常
python完整的异常处理语法结构如下:

特别说明:
1.try块是必需的,except块和finally,当try块没有出现异常时,程序会执行else块
2.try块后只有一个except快块会被执行,不可能有多个except块被执行。
3.原则:先捕获小异常再捕获大异常
实例:
import sys try:
a = int(sys.argv[1])
b = int(sys.argv[2])
c = a / b
print("您输入的两个数相除的结果是:",c)
except IndexError:
print("索引错误:运行程序时输入的参数个数不够")
except ValueError:
print("数值错误:程序只能接受整数参数")
except ArithmeticError:
print("算术错误")
except Exception:
print("未知异常") # 输出结果:
E:\myproj\crazy_python\07\7.2>python div_test.py 3 0
算术错误
单异常捕获
import sys try:
a = int(sys.argv[1])
b = int(sys.argv[2])
c = a / b
print("您输入的两个数相除的结果是:",c)
except (IndexError, ValueError, ArithmeticError):
print("程序发生了数组越界、数字格式异常、算术异常之一")
except:
print("未知异常") # 输出结果
E:\myproj\crazy_python\07\7.2>python multi_exception_test.py 4 0
程序发生了数组越界、数字格式异常、算术异常之一
多异常捕获
def foo():
try:
fis = open("a.txt")
except Exception as e:
print(e)
print(e.args)
print(e.errno)
print(e.strerror) foo() # 输出结果:
[Errno 2] No such file or directory: 'a.txt'
(2, 'No such file or directory')
2
No such file or directory
访问异常信息
4. 1try或except中的return语句,不会影响finally块的执行;但是os._exit()语句会退出python解释器,导致finally块试去执行机会。
import os def test():
fis = None
try:
fis = open("a.txt")
except OSError as e:
print(e.strerror)
return
os._exit(1)
finally:
if fis is not None:
try:
fis.close()
except OSError as ioe:
print(ioe.strerror)
print("执行finally里的资源回收!") test() # 输出结果:
No such file or directory
执行finally里的资源回收!
finally_1
4.1不能在finally块使用return或raise。finally块中的return或raise语句,会导致try、except块中的return、raise语句失效
def test():
try:
return True # 由于finally中包含return,该return语句失效
finally:
return False a = test()
print(a) # 输出结果
False
finally_2
抛出异常(使用raise引发异常)
不管是系统引发的异常,还是程序员使用raise手动引发的异常,python解释器对异常的处理没有任何差别,都可以使用try...except来捕获它
raise语句有如下三种常用用法:

def main():
try:
mtd(3)
except Exception as e:
print("程序出现异常:", e)
mtd(3) def mtd(a):
if a > 0:
raise ValueError("a的值大于0.不符合要求") main() # 输出结果:
D:\soft\python36\python.exe D:/myproject/crazy_python/07/7.3/raise_test.py
Traceback (most recent call last):
程序出现异常: a的值大于0.不符合要求
File "D:/myproject/crazy_python/07/7.3/raise_test.py", line 17, in <module>
main()
File "D:/myproject/crazy_python/07/7.3/raise_test.py", line 9, in main
mtd(3)
File "D:/myproject/crazy_python/07/7.3/raise_test.py", line 14, in mtd
raise ValueError("a的值大于0.不符合要求")
ValueError: a的值大于0.不符合要求
raise_1
except和raise同时使用
class AuctionException(Exception): pass
class AuctionTest:
def __init__(self, init_price):
self.init_price = init_price
def bid(self, bid_price):
d = 0.0
try:
d = float(bid_price)
except Exception as e:
# 此处只是简单地打印异常信息
print("转换出异常:", e)
# 再次引发自定义异常
# raise AuctionException("竞拍价必须是数值,不能包含其他字符!") # ①
raise AuctionException(e)
if self.init_price > d:
raise AuctionException("竞拍价比起拍价低,不允许竞拍!")
initPrice = d
def main():
at = AuctionTest(20.4)
try:
at.bid("df")
except AuctionException as ae:
# 再次捕获到bid()方法中的异常,并对该异常进行处理
print('main函数捕捉的异常:', ae)
main() # 输出结果:
转换出异常: could not convert string to float: 'df'
main函数捕捉的异常: could not convert string to float: 'df'
except_raise
python学习-异常处理之捕获异常与抛出异常(七)的更多相关文章
- python学习-异常处理
小技巧 isinstance(obj,foo) 检查是否obj是否是类 foo 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo) ...
- python 学习 异常处理
异常处理实例 while True: num1 = input('num1:') num2 = input('num2:') try: num1 = int(num1) num2 = int(num2 ...
- python学习之路基础篇(第七篇)
一.模块 configparser configparser用于处理特定格式的文件,其本质是利用open来对文件进行操作 [section1] # 节点 k1 = v1 # 值 k2:v2 # 值 [ ...
- python学习笔记之socket(第七天)
参考文档: 1.金角大王博客:http://www.cnblogs.com/alex3714/articles/5227251.html ...
- Python学习笔记——基础篇【第七周】———类的静态方法 类方法及属性
新式类和经典类的区别 python2.7 新式类——广度优先 经典类——深度优先 python3.0 新式类——广度优先 经典类——广度优先 广度优先才是正常的思维,所以python 3.0中已经修复 ...
- Python学习笔记——基础篇【第七周】———进程、线程、协程篇(socket基础)
http://www.cnblogs.com/wupeiqi/articles/5040823.htmlhttp://i.cnblogs.com/EditPosts.aspx?postid=55437 ...
- Python学习——异常处理
1.异常基础: 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面 基本语法: try: pass except Exception as e: pri ...
- Python学习笔记——基础篇【第七周】———FTP作业(面向对象编程进阶 & Socket编程基础)
FTP作业 本节内容: 面向对象高级语法部分 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 参考:http://www.cnblogs.com/wupeiqi/ ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
随机推荐
- Java 开发中常用的网站地址
博客地址:http://www.moonxy.com 一.前言 在日常的开发中,通常需要访问或者设置不同的网站来获取需要的数据,不如我们都知道 Linux 系统版本比较多(例如:Ubuntu.Cent ...
- 53 (OC) 皮肤切换
1:添加皮肤 1.1:iOS皮肤切换方案 http://www.cocoachina.com/ios/20171012/20762.html 1.2:整合 iOS几种换肤思路和demo https:/ ...
- spring中基于注解使用ehcache
继续上篇,这篇介绍服务层缓存,基于注解的方式使用ehcache 注解的标签主要有4个:@Cacheable.@CacheEvict.@CachePut.@Caching,他们的用法是: @Cachea ...
- 豆瓣电影TOP250和书籍TOP250爬虫
豆瓣电影 TOP250 和书籍 TOP250 爬虫 最近开始玩 Python , 学习爬虫相关知识的时候,心血来潮,爬取了豆瓣电影TOP250 和书籍TOP250, 这里记录一下自己玩的过程. 电影 ...
- Python学习-字符编码, 数据类型
本篇主要内容: 字符编码 Python中的数据类型有哪些 类型的一些常用操作及方法 一.字符编码 编码解释的大部分内容摘自廖雪峰老师教程中的讲解,点击跳转. 简单介绍: 我们知道计算机只能处理数字,如 ...
- 使用apache的poi来实现数据导出到excel的功能——方式一
利用poi导出复杂样式的excel表格的实现. 我们要实现的效果是: 我们利用提前设计好模板样式,再在模板中填充数据的方式. 首先,pom.xml引入poi. <dependency> & ...
- 【ASP.NET-中级】SQLHelper数据访问公共类
ASP.NET开发中的三层开发思想指的是UI层(界面显示层),BLL层(业务逻辑层),DAL层(数据访问层)三层,三层之间通过函数的调用来达到降低耦合,易于系统维护的目的,SQLHelper助手类的主 ...
- iSCSI 网关管理 - Storage6
iSCSI网关集成了Ceph存储和iSCSI标准,以提供一个高可用性(HA) iSCSI目标,该目标将RADOS块设备(RBD)映像导出为SCSI磁盘.iSCSI协议允许客户机 (initiator) ...
- JS实现数组排序的方法
前言 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列,当然排序也是算法中的一种,javascript内置的sort函数是多种排序算法的集合,数组在原数组上进 ...
- 使用 chart 部署 skywalking
使用 chart 部署 skywalking 本文主要讲述的是如何使用 Helm Charts 将 SkyWalking 部署到 Kubernetes 集群中,相关文档可以参考skywalking-k ...