杨梅冲
每天在想什么呢?

一、异常处理的定义

# 什么是异常处理
    异常就是程序运行中出现的错误,如果改错误没有相应的处理机制
    那么这个错误就会抛出来,程序也会随之停止运行
# 为什么要有异常处理
    增强代码的健壮性
    try...except...
# 如何使用
# 异常三部分:
"""
1.报错类型
2.错误信息的值
3.错误的定位信息
"""
# 异常分类
"""
1.语法上的错误
2.逻辑上的错误
"""
# 根据不同的错误类型来获取
try:
    # d = {'name': 'jason'}
    # d['password']
    a = 1
    x
    l = [1,2,3,4]
    l[123]
except NameError:
    print('变量未定义')
except KeyError:
    print('字典键不存在')
except IndexError:
    print('索引超出范围')

# 执行结果:变量未定义

万能异常:

# 万能异常:都能返回报错的信息
try:
    d = {'name': 'jason'}
    d['password']
    # a = 1
    # x
    # l = [1,2,3,4]
    # l[123]
except Exception as e:  # 将错误信息的值赋值给变量a
    print(e)
"""
x:name 'x' is not defined
l[123]:list index out of range
d['password'] :'password'
"""

# 个人建议异常不要频繁使用 能尽量不用就不用 仅仅只加载会出现报错的几个行代码上下,try里面的代码越少越好
else 与finaly
try:
    d = {'name': 'jason'}
    d['password']
    # a = 1
    # x
    # l = [1,2,3,4]
    # l[123]
    print('haha')
    pass
except Exception as e:
    print(e)
else:
    print('当try里面的代码没有报错的情况下走else')
finally:
    print('无论前面有没有报错 我都会执行')

raise:主动抛出异常

class User:
    def __init__(self,name):
        self.__name = name
    def set_info(self,val):
        if not isinstance(val,str):
            raise TypeError('name字段必须是str类型')
        self.__name = val
obj = User('simon')
obj.set_info(123) # TypeError: name字段必须是str类型

assert:断定

l = [1,2,3,4]
assert  len(l) < 0  # AssertionError

自定义异常:

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

    def __str__(self):
        return '<%s>'%self.msg
raise MyError('我自己定义了一个异常')

总结:

try:
    可能报错的代码块
except 异常类型 as 异常信息:
    print(异常信息)
else:
    try监测的代码没有任何bug的情况下才会走else内部代码块
finally:
    无论是否出bug都会走finally内部的代码块

raise 主动抛出异常
    raise TypeError('异常信息')

assert 断言

自定义异常 继承BaseException  内部定义__str__来显示报错信息





posted on 2019-06-03 11:18  杨梅冲  阅读(109)  评论(0编辑  收藏  举报