Python异常处理

异常就是错误发生的信号,我们需要对该信号做处理,如果不处理,往后的代码就不能执行了

异常的分类
    逻辑错误 # 是允许出现的,但是呢,编程的时候尽量避免逻辑错误的发生
    语法错误 # 不允许出现的
    
异常的组成:
    1. Traceback:追溯信息,可以定位到错误发生的位置
    2. 错误类型: XXXError(TypeError、KeyError、IndexError等)
    3. 错误的原因:通过这部分我们可以很精准的找到错误的具体原因,这块对我们解决问题是最重要的
    
解决异常的完整语法:
    try:
        被监测的代码(这块儿一般写可能会发生异常的代码)
    except 错误类型1 as e:
        print(e) # 查看到错误的原因
    except 错误类型2 as e:
        print(e) # 查看到错误的原因
   except 错误类型3 as e:
        print(e) # 查看到错误的原因
   except 错误类型4 as e:
        print(e) # 查看到错误的原因
   except Exception as e: '''万能的异常,以上所有的类型都没有被找到,就交给Exception处理'''
        print(e) # 查看到错误的原因
   else:
        print('被监测的代码没有异常的时候会走这个分支')
    finally:
        print('不管被监测的代码有么有异常都会走')
"""以上结构不是必须全部都要有的,需要哪些就写哪些"""

主动抛出异常:我们自己有时候也需要抛出一些异常信息,来阻止代码的执行
举例:
    抽象类:在父类中限制子类必须有某个方法
    
    import abc
    class Animal(metaclass=abc.ABCMeta):
        @abc.abstractmethod # 这么设置之后,以后所有继承Animal类的子类中都必须有speak函数
        def speak(self):pass
    
    class People(Animal):
        def speak(self):
            pass
        
    """不推荐使用这种方式"""
    
   
class Animal():
    def speak(self):
        raise Exception("请先实现speak功能")  # 这个方式是最常用,因为简单


class People(Animal):
    pass

obj=People()
obj.speak()
"""主动抛出异常的关键字是:raise"""
"""语法结构:raise 异常的类型"""
# raise IndexError('索引错误')
# raise KeyError('字典错误')
# raise Exception('字典错误')
# print(123)

# 断言
# assert 条件  # 条件必须是成立的
# l = ['kevin', 'jason', 'tank1']
# assert 'tank' in l
# print(123)

# 有什么用:单元测试(断言) 我自己写代码去测试我的写代码的bug UnitTest
"""后续的代码中必须要用tank这个元素"""

自定义异常
class MyException(BaseException):
    def __init__(self, msg):
        self.msg = msg
    def __str__(self):
        return self.msg

    def reponse(self):
        pass


raise MyException('用户名必须填写')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值