python_异常处理

1、异常处理的定义spa

# 什么是异常处理
    异常就是程序运行中出现的错误,若是改错误没有相应的处理机制
    那么这个错误就会抛出来,程序也会随之中止运行
# 为何要有异常处理
    加强代码的健壮性
    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('索引超出范围')

# 执行结果:变量未定义

万能异常:code

# 万能异常:都能返回报错的信息
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:主动抛出异常blog

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('我本身定义了一个异常')

总结:it

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

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

assert 断言

自定义异常 继承BaseException  内部定义__str__来显示报错信息
相关文章
相关标签/搜索