课时33:异常处理:你不可能总是对的2
2018-08-26 17:30:36来源:博客园 阅读 ()
目录:
一、try-except语句
二、try-finally语句
三、raise语句
四、课时33课后习题及答案
**********************
一、try-except语句
**********************
try-except语句格式如下:
try: 检测范围 except Exception[as reason]: 出现异常(Exception)后的处理代码
try-except语句用于检测和处理异常,举个例子来说明这一切是如何操作的:
f = open("我为什么是一个文档.txt") print(f.read()) f.close()
以上代码在“我为什么是一个文档.txt”这个文档不存在的时候,Python就会报错说文件不存在:
Traceback (most recent call last): File "C:\Users\14158\Desktop\lalallalalal.py", line 1, in <module> f = open("我为什么是一个文档.txt") FileNotFoundError: [Errno 2] No such file or directory: '我为什么是一个文档.txt'
显然这样的用户体验很糟糕,因此可以这样修改:
try: f = open("我为什么是一个文档.txt") print(f.read()) f.close() except OSError: print("文件打开的过程出错啦")
上面的例子由于使用了大家习惯的语言来表达错误的信息,用户体验当然会好很多:
文件打开的过程出错啦
但是从程序员的角度来看,导致OSError异常的原因有很多(例如FileExistsError、FileNotFoundError等等),所以可能会更在意错误的具体内容,这里可以使用as把具体的错误信息给打印出来:
try: f = open("我为什么是一个文档.txt") print(f.read()) f.close() except OSError as reason: print("文件打开的过程出错啦,错误的原因是:" + str(reason))
文件打开的过程出错啦,错误的原因是:[Errno 2] No such file or directory: '我为什么是一个文档.txt'
1、针对不同异常设置多个except
一个try语句还可以和多个except语句搭配,分别对感兴趣的异常进行检测处理:
try: sum = 1 + '1' f = open("我是一个不存在的文档.txt") print(f.read()) f.close() except OSError as reason: print("文件打开的过程出错啦,错误的原因是:" + str(reason)) except TypeError as reason: print("文件打开的过程出错啦,错误的原因是:" + str(reason))
文件打开的过程出错啦,错误的原因是:unsupported operand type(s) for +: 'int' and 'str'
2、对多个异常统一处理
except后边还可以跟多个异常,然后对这些异常进行统一的处理:
try: int("abc") sum = 1 + "1" f = open("我是一个不存在的文档.txt") print(f.read()) f.close() except (OSError,TypeError): print("文件打开的过程出错啦,错误的原因是:" + str(reason))
Traceback (most recent call last): File "C:\Users\14158\Desktop\lalallalalal.py", line 2, in <module> int("abc") ValueError: invalid literal for int() with base 10: 'abc'
3、捕获所有的异常
如果你无法确定要对哪一类异常进行处理,只是希望在try语句块里一旦出现异常,可以给用户一个“看得懂”的提醒,那么可以这么做。
............
except:
print("出错了~")
............
不过通常不建议这么做,因为它会隐藏所有程序员未想到并且未做好处理准备的错误,例如当用户输入ctrl+C试图终止程序,却被解释为KeyboardInterrupt异常。另外要注意的是,try语句检测范围内一旦出现异常,剩下的语句将不会执行。
*********************
二、try-finally语句
*********************
如果“我是一个不存在的文档”确实存在,open()函数正常返回文件对象,但异常却发生在成功打开文件后的sum = 1 + “1”语句上。此时python将直接跳转到except语句,也就是说,文件被打开了,但并没有执行关闭的命令:
try: f = open("我是一个不存在的文档.txt") print(f.read()) sum = 1 + "1" f.close() except: print("出错啦")
为了实现像这种“就算出现异常,但不得不执行的收尾工作(比如在程序崩溃前保存用户文档)”,引入了finally来扩展try:
try: f = open("我是一个不存在的文档.txt") print(f.read()) sum = 1 + "1" except: print("出错啦") finally: f.close()
如果try语句块中没有出现任何运行时出现的错误,会跳过except语句执行finally语句块的内容。如果出现异常,则会先执行except语句块的内容再执行finally语句块的内容。总之,finally语句块中的内容就是确保无论如何都将被执行的内容。
****************
三、raise语句
****************
也许会问,我的代码能不能自己抛出一个异常呢?答案是可以的,可以使用raise语句抛出一个异常:
>>> raise ZeroDivisionError Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> raise ZeroDivisionError ZeroDivisionError
抛出的异常还可以带参数,表示异常的解释:
>>> raise ZeroDivisionError("除数不能为零!") Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> raise ZeroDivisionError("除数不能为零!") ZeroDivisionError: 除数不能为零!
*******************************
四、课时33课后习题及答案
*******************************
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:爬虫与反爬
- PYTHON异常处理 2019-07-24
- 图像处理库 Pillow与PIL 2019-07-24
- python学习-37 其他的文件处理方法 2019-07-24
- Python-09-文件处理 2019-07-24
- python学习-36 文件处理b模式 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash