day27——面向对象的总结、异常处理

day27

面向对象的总结

异常处理

错误的分类
  • 语法错误
if

if 2>1
	print(222)
    
dic = {"name"; "alex"}
  • 逻辑错误
num = int(input("请输入数字"))

dic = {"name": "海狗", "age": 18}
dic["hobby"]
什么是异常?

代码发生异常错误之后,你的程序就中断了

异常处理?

当代码出现异常时,我通过某种方式不让你的程序中断,合理的“跳”过去,异常处理

为什么要有异常处理?
  • 用户体验良好
  • 使你的代码更有健壮性,容错性
异常处理的两种方式
  • 利用if只能处理简单的异常,如果异常需要考虑的方面比较多,不适合
  • 利用try的方式进行异常处理
try的尝试
try:
    num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
    print(111)
except ValueError:
    print(666)
    
try:
    dic = {"name": "嘉欣"}
    print(dic["age"])
    num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
    print(111)
except ValueError:
    print(666)   # 报错
结构1:单分支
try:
    num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
    dic = {"name": "嘉欣"}
    print(dic["age"])
    print(111)
except ValueError:
    print(666)
结构2:多分支
try:
    num = int(input("请输入序号"))  # 出现ValueError错误之后,直接跳转到except语句
    dic = {"name": "嘉欣"}
    print(dic["age"])
    l1 = [1,2]
    print(l1[100])
    print(111)
except ValueError:
    print("输入的有非数字元素")
except KeyError:
    print("没有此键")
except IndexError:
    print("没有此下表")
结构3:万能异常

万能异常:处理所有python识别的异常

try:
    dic = {"name": "嘉欣"}
    print(dic["age"])
    l1 = [1,2]
    print(l1[100])
    print(111)
except Exception as e:
    print(e)
print(666)
什么时候用万能异常?

如果你对错误信息不关心,只是想要派出错误让程序继续运行,用万能异常

什么时候用多分支?

如果你对错误信息要进行明确的分流,让你的程序多元化开发,则使用多分支

# 之前的写法:
# num = input("输入序号")
# if num.isdecimal():
#     num = int(num)
#     if 0 < num < 5:
#         if num == 1:
#             pass   # func()
# else:
#     print("请输入数字")

def func():
    pass

def func1():
    pass

dic = {
    1: func,
    2: func1
}
try:
    num = int(input("请输入序号"))
    dic[num]()
except ValueError:
    print("请输入数字")
except KeyError:
    print("请输入范围内的序号")
结构4:多分支+万能异常
def func():
    pass

def func1():
    pass

dic = {
    1: func,
    2: func1
}
try:
    num = int(input("请输入序号"))
    dic[num]()
except ValueError:
    print("请输入数字")
except KeyError:
    print("请输入范围内的序号")
except Exception:
    print("程序出现意料之外的错误...")
结构5: try else finally

except 必须依赖于try,else必须依赖于except和try

finally只是依赖于try

try:
    dic = {"name": "嘉欣"}
    print(dic["age"])
    l1 = [1,2]
    print(l1[100])
    print(111)
except KeyError:
    print("没有此键")
except IndexError:
    print("没有此下标")
else:
    print("如果没有出现异常则执行这里")
finally:
    print("finally 666")
  • finally:在异常出现之前,执行finally语句
try:
    dic = {'name': '嘉欣'}
    print(dic['age'])
    l1 = [1, 2]
    print(l1[100])
# except KeyError:
#     print('没有此键')
# except IndexError:
#     print('没有此下标')
# except IndexError:
#     pass
finally:
    print('finally 666')
  • finally用途

用在 关闭数据库链接,文件句柄关闭,数据保存等

# with open('test1',encoding='utf-8',mode='r+') as f1:
#     try:
#         for i in f1:
#             print(i)
#         if ....:
#     finally:
#
#         f1.close()

# 在return结束函数之前,执行finally代码.
# def func():
#     try:
#         print(111)
#         return 666
#     finally:
#         print(222)
# print(func())
结构6:主动触发异常
raise ValueError("出现了value错误")
结构7

断言:展现出一种强硬的态度

# assert 条件
name = "alex"
n1 = input("请输入:")
assert name == n1
print(111)
print(222)
结构8:自定义异常

python中给你提供的错误类型很多,但不是全部的错误

class LiYeError(BaseException):
    def __init__(self, msg):
        self.msg = msg

    def __str__(self):
        return self.msg

try:
    # 三行
    raise LiYeError('socket.connent.....')
except LiYeError as e: # e = LiYeError("类型错误)
    print(e)
posted @ 2019-08-19 21:55  SupSnake  阅读(93)  评论(0编辑  收藏  举报