Python--小甲鱼学习笔记--第33课:异常处理(try-except, try-finally, raise)
来源:互联网 发布:飞升符篆升级数据 编辑:程序博客网 时间:2024/05/21 10:52
1)try-except语句:
try: 检测范围 except Exception[as reason]: 出现异常(Exception)后的处理代码
举例:当试图打开一个test.txt文件,并输出文件内容时,代码如下:
f = open('test.txt')print(f.read())f.close()
当test.txt文件不存在时,python就会报错:
Traceback (most recent call last): File "C:\Users\XXN\Desktop\python\fishC_33\try_except.py", line 1, in <module> f = open('test.txt')FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
要想处理这种情况,可以这么修改:
try: f = open('test.txt') print(f.read()) f.close()except OSError: print('文件出错啦!')
运行结果:
======== RESTART: C:\Users\XXN\Desktop\python\fishC_33\try_except.py ========文件出错啦!>>>
如果想知道出错的具体原因,可以这么写:
try: f = open('test.txt') print(f.read()) f.close()except OSError as reason: print('文件出错啦!\n错误出现的原因是:'+ str(reason))
运行结果:
======== RESTART: C:\Users\XXN\Desktop\python\fishC_33\try_except.py ========文件出错啦!错误出现的原因是:[Errno 2] No such file or directory: 'test.txt'>>>
一个try可以和多个except搭配:Try-except语句一旦出现异常,剩下的语句不会被执行。
try: sum = 1 + '1' #TypeError f = open('test.txt') print(f.read()) f.close()except OSError as reason: print('文件出错啦!\n错误出现的原因是:'+ str(reason)) except TypeError as reason: print('类型出错啦!\n错误出现的原因是:'+ str(reason))
运行结果:
======== RESTART: C:\Users\XXN\Desktop\python\fishC_33\try_except.py ========类型出错啦!错误出现的原因是:unsupported operand type(s) for +: 'int' and 'str'>>>
对于出现不包含在except捕获范围内的异常,仍会报错:
try: int('abc') # ValueError sum = 1 + '1' #TypeError f = open('test.txt') print(f.read()) f.close()except OSError as reason: print('文件出错啦!\n错误出现的原因是:'+ str(reason))except TypeError as reason: print('类型出错啦!\n错误出现的原因是:'+ str(reason))
运行结果:int('abc')仍会导致报错ValueError:
======== RESTART: C:\Users\XXN\Desktop\python\fishC_33\try_except.py ========Traceback (most recent call last): File "C:\Users\XXN\Desktop\python\fishC_33\try_except.py", line 2, in <module> int('abc') # ValueErrorValueError: invalid literal for int() with base 10: 'abc'>>>
同时捕获OSError和TypeError,这么操作:
try: sum = 1 + '1' #TypeError f = open('test.txt') print(f.read()) f.close()except (OSError,TypeError): print('出错啦!')
2)try-finally语句:
try: 检测范围 except Exception[as reason]: 出现异常(Exception)后的处理代码 finally: 无论如何都会被执行的代码
如果try语句块中没有任何运行时的错误,那么python会跳过except语句块来执行finally语句块;如果出现异常,会找出except对应的异常,并执行异常处理的代码,然后再来执行finally语句。
举例:当我们打开一个文件时,欲写入内容时,当写入内容后面的语句出现错误,此时写入的内容直接进入缓存区,不会被写到文件。要想避免此问题,需加入finally语句。操作如下:
try: f = open('test.txt','w') print(f.write('我存在了!')) sum = 1 + '1' #TypeErrorexcept (OSError,TypeError): print('出错啦!')finally: f.close()
3)raise语句:raise异常的名字(代码自己引发出一个异常)
>>> raise ZeroDivisionError('除数为零的异常')Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> raise ZeroDivisionError('除数为零的异常')ZeroDivisionError: 除数为零的异常
0. 我们使用什么方法来处理程序中出现的异常?`
使用 try-except 搭配来捕获处理程序中出现的异常,形式为:
try: 检测范围except Exception[as reason]: 出现异常(Exception)后的处理代码
1.一个try语句可以和多个except语句搭配吗?为什么?
可以。因为try语句块中可能会出现多类异常,利用多个except语句可以分别捕获并处理不同的异常。举例如前面try-except模块讲解。
2.你知道如何统一处理多类异常吗?
在 except 后边使用小括号“()”把多个需要统一处理的异常括起来:
try: 检测范围except (OSError, TypeError): #用一个元组表示,还可增加其他的异常类型 异常处理代码
3.except后边如果不带任何异常类,Python会捕获所有(try语句块内)的异常并统一处理,但小甲鱼却不建议这么做,你知道为什么吗?
因为它会隐藏所有程序员未想到并且未做好准备处理的错误,例如用户输入ctrl+c试图终止程序会被解释为KeyboardInterrupt异常。
4.如果异常发生在成功打开文件后,Python跳到except语句执行,并没有执行关闭文件的命令(用户写入文件的数据就可能没有保存起来),因此我们需要确保无论如何(就算出了异常退出)文件也要被关闭,我们应该怎么做呢?
我们可以使用finally语句来实现,如果try语句块中没有出现任何运行时错误,会跳过except语句块执行finally语句块的内容。如果出现异常,则会先执行except语句块的内容再接着执行finally语句块的内容。总之,finally语句块里的内容就是确保无论如何都将被执行的内容!
5.请恢复以下代码中马赛克挡住的内容,使得程序执行后可以按要求输出。
代码:
try: for i in range(3): for j in range(3): if i == 2: raise KeyboardInterrupt print(i, j) except KeyboardInterrupt: print('退出啦!')
6.还记得我们第一个小游戏吗?只要用户输入非整型数据,程序立刻就会蹦出不和谐的异常信息然后崩溃。请使用刚学的异常处理方法修改以下程序,提高用户体验。)
这里对可能导致异常的guess = int(temp) 进行监测
import random secret = random.randint(1,10) print('------------------我爱鱼C工作室------------------') temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:") try: guess = int(temp) except ValueError: print('输入错误!') guess = secret while guess != secret: temp = input("哎呀,猜错了,请重新输入吧:") guess = int(temp) if guess == secret: print("我草,你是小甲鱼心里的蛔虫吗?!") print("哼,猜中了也没有奖励!") else: if guess > secret: print("哥,大了大了~~~") else: print("嘿,小了,小了~~~") print("游戏结束,不玩啦^_^")
7.尝试一个新的函数int_input(),当用户输入整数的时候正常返回,否则提示出错并要求重新输入。
程序实现如图:
def int_input(prompt=''): while True: try: int(input(prompt)) break except ValueError: print('出错,您输入的不是整数!') int_input('请输入一个整数:')
8.把文件关闭放在 finally语句块中执行还是会出现问题,像下边这个代码,当前文件夹中并不存在”My_File.txt”这个文件,那么程序执行起来会发生什么事情呢?你有办法解决这个问题吗?
try: f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T print(f.read()) except OSError as reason: print('出错啦:' + str(reason)) finally: f.close()
答:由于finally语句块里试图去关闭一个并没有成功打开的文件,因此会弹出错误内容如下:
>>> 出错啦:[Errno 2] No such file or directory: 'My_File.txt' Traceback (most recent call last): File "C:\Users\FishC000\Desktop\test.py", line 7, in <module> f.close() NameError: name 'f' is not defined
我们这么修正:
try: f = open('My_File.txt') # 当前文件夹中并不存在"My_File.txt"这个文件T_T print(f.read()) except OSError as reason: print('出错啦:' + str(reason)) finally: if 'f' in locals(): # 如果文件对象变量存在当前局部变量符号表的话,说明打开成功 f.close()
- Python--小甲鱼学习笔记--第33课:异常处理(try-except, try-finally, raise)
- Python学习笔记之错误处理(关键词:错误处理、异常机制、try、except、else、finally、raise)
- (Python)异常处理try...except、raise
- (Python)异常处理try...except、raise
- (Python)异常处理try...except、raise
- Python异常处理try...except...finally raise assert
- python中的异常处理try/except/finally/raise
- python try except finally raise
- python try except finally raise
- Python异常处理try...except、raise
- Python---异常处理try...except、raise
- Python异常处理try...except、raise
- 异常处理try...except、raise
- 【python学习笔记】Python异常处理raise、try...except、断言assert
- python try...except....else...finally处理异常
- [代码笔记] python之 异常处理 try except else finally
- Python中异常处理简单示例(try,except,finally)
- 《python》学习笔记(Day1++),try\except\finally机制
- 拒绝作坊式质量管理,Testin发版测试助传统行业互联网转型
- 视频质量,分辨率以及码率之间的关系
- SEO如何优化让用户喜欢上网站标题
- 锚点概念的理解
- Java Json Post 请求
- Python--小甲鱼学习笔记--第33课:异常处理(try-except, try-finally, raise)
- Socket连接错误之toString() unavailable
- 利用iText将多张图处转为一个pdf
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- 不错的MAVEN教程
- node npm的基本指令
- 作业六
- java 实现 视频格式转换。
- python subprocess用ctrl+c 的方式终止