python学习笔记(十五)异常处理
相关概念
错误:程序运行之前的语法问题。
如:关键字、缩进对齐、符号不成对等
异常:程序运行过程中出现的问题。
如:除数等于0、下标越界、访问不存在的对象属性等
异常处理
说明
异常处理就是在程序出现异常时进行人为的干预
异常处理可以认为是一种特殊的流程控制语句
异常处理可以提高代码的健壮性
语法
try:
print('正常代码')
a = 10 / 0
print('执行结束')
except Exception as e:
# Exception是所有异常的基类
# 捕获异常,然后进行异常的处理
print('出现异常', e)
print('OVER')
多异常处理
# 每种异常都有特定的处理方案,可以进行单独处理
try:
print('正在执行')
# print(a)
print(10/0)
print('正常结束')
except (NameError, ZeroDivisionError) as e:
# 分组处理异常
print('NameError or ZeroDivisionError', e)
# 注意 不可以将基类写在最前面 当前面获取之后后面就不会进行获取了
except Exception as e:
print('其他异常', e)
print('OVER')
完整异常结构
try:
print('正常执行')
print(10/0)
print('正常结束')
except Exception as e:
print('出现异常', e)
else:
print('else语句:没有异常时会执行')
finally:
print('finally语句:无论有无异常都执行')
print('OVER')
手动抛出异常
try:
print('正常执行')
# 手动抛出异常
raise Exception('手动抛出的异常')
print('正常结束')
except Exception as e:
print('出现异常', e)
print('OVER')
异常嵌套
print('我要学习,什么也阻止不了学习的脚步')
try:
print('我准备学习语文')
raise Exception('语文书丢了')
print('成功学习语文')
except Exception as e:
print('语文学习失败:', e)
try:
print('于是我准备学习数学')
raise Exception('数学题太难了!!!')
print('乘成功学习语文')
except Exception as e:
print('数学学习失败:', e)
print('于是决定去打游戏')
print('打游戏真是快乐啊')
print('今天又是充满希望的一天啊!!!')
自定义异常类
import time
# 自定义异常类
class MyException(Exception):
def __init__(self, msg):
self.msg = msg
def __str__(self):
return self.msg
# 封装异常处理方法
def deal(self):
print('异常处理中...')
time.sleep(2)
print('异常处理结束')
try:
print('正常执行')
# raise Exception('手动抛出异常')
raise MyException('自定义异常')
print('执行结束')
except MyException as e:
# 自定义的异常类要放在前面捕获
print('自定义异常:', e)
# 调用专门的函数处理对应的异常
e.deal()
except Exception as e:
print('系统异常:', e)
print('OVER')