异常处理
程序一旦发生错误,就从错误的位置停下来,不再继续执行后面的内容,但你依旧需要接着执行,就会使用到异常处理;
常用于小的段代码进行异常处理,而非整段代码都使用异常处理
# 需求忽略错误,接着执行 ret = int(input('请输入数字:')) print(ret*'*')
万一用户输入非数字,则会抛出异常。
使用try 和 except就能处理异常:
1、try 是我们需要处理的代码;
2、except 后面跟一个错误类型 当代码发生错误且错误类型符合的时候,就会执行except中的代码;
3、except支持多分支(即可以有多个except);
# 如果输入非数字就会抛出异常 try: [][2] print('1111') ret = int(input('请输入数字:')) print(ret * '*') except ValueError: print('输入有误,请输入数字') except IndexError: print('超出长度了')
万能异常处理 --- Exception
1、有了万能的处理机制,仍然需要把能预测到的问题单独处理;
2、单独处理的所有内容都应该写在万能异常之前;
try: print('0000') [][2] print('1111') 1/0 print('2222') ret = int(input('请输入数字:')) print(ret * '*') except ValueError: print('输入有误,请输入数字') except Exception: print('出现Bug')
else: try执行过程中没有发生任何异常,就接着执行else后的代码
try: # print('0000') # [][2] # print('1111') # 1/0 print('2222') ret = int(input('请输入数字:')) print(ret * '*') except ValueError: print('输入有误,请输入数字') except Exception: print('出现Bug') else: print('没有BUG')
finally: 不管代码是否异常,都会执行。
1、finally 和 return相遇的时候,依然会执行;
1.1、在return之前会先执行finally后的内容,执行完成后才将值返回。
2、 函数里做异常处理用,不管是否异常去做一些收尾工作;
def func(): try: f = open('test','w') # sdfsfd return True except Exception: return False finally: f.close() print('不管是否报错,都关闭文件') print(func())
遇到异常时,返回错误的内容--给异常起别名,并打印输出错误内容。
try: ret = int(input('请输入数字:')) print(ret * '*') except ValueError as error: print('输入有误,请输入数字',error)
浙公网安备 33010602011771号