• python-异常处理


    异常和错误

    try中的代码
      一旦在一个地方发生错误
      后面的代码就不执行了
      会直接跳到except的位置
      一个错误类型只能处理一种错误
    出现异常之后#比如上面的例子出现indexerror错误,会先执行到valueerror,在往下找
      会从上到下去执行except中的error
      一旦匹配上就会执行except中的代码
      执行完之后不再执行其他except

    l =[1,2,3,4]
    try:
        num = int(input('num:'))
        print(l[num])
    except ValueError:
        print('请输入一个数字')
    except IndexError:
        print('输入的数字超出范围')

    万能异常

    l =[1,2,3,4]
    try:
        num = int(input('num:'))
        print(l[num])
    except:                     #如果不写 所有的错误都能处理
        print('万能的异常')
    #另一种写法
    l =[1,2,3,4]
    try:
        num = int(input('num:'))
        print(l[num])
    except Exception:            #万能异常
        print('万能的异常')

    但是万能异常有个缺陷,就是没有办法打印出到底是什么错误,那怎么解决

    l =[1,2,3,4]
    try:
        num = int(input('num:'))
        print(l[num])
    except Exception as e:            #万能异常,能打印出错误原因'e'可以是任意字符,习惯用法
        print(e)
    #那么万能异常 怎么使用
        #有多个except的时候,万能异常永远发在最后
    l =[1,2,3,4]
    try:
        num = int(input('num:'))
        print(l[num])
    except ValueError:
        print('请输入一个数字')
    except IndexError:
        print('输入的数字超出范围')
    except Exception as e:#在最后位置
        print(e)

    else中的代码 在try中的代码全部顺利执行之后才执行
    如果try中的代码出现错误,那么else就不执行
    什么时候用呢?
      在代码顺利执行的时候,报成功或者报结果的时候使用的
    try except格式
    try except else格式 else必须放在最后
    try except else finally格式
    try finally格式
    finally:不管代码是否出错,都是一个无论如何会执行的代码

    l =[1,2,3,4]
    try:
        num = int(input('num:'))
        print(l[num])
    except ValueError:
        print('请输入一个数字')
    except IndexError:
        print('输入的数字超出范围')
    else:
        print('执行我了')
    finally:
        print('最后执行')

    finally

    finally:不管代码是否出错,都是一个无论如何会执行的代码
          打开的操作系统的资源不管代码执行是否出错,都应该归还
          所以这样的代码就应该写在finally中
    def func():
        try:
            f = open('file','w')
            content = f.read()
            return content #在这执行完后,要返回,就不会归还资源
        finally:
            f.close() #在这里归还资源,无论怎样 都执行finally

    主动抛出异常

    #主动的抛出一个异常
    raise TypeError#会报错 但在这里没有提示
    raise TypeError('出现了不可思议的TypeError')
    raise ValueError('出现了不可思议的TypeError')

    assert断言

    #像当于一个条件判断,满足条件通过,不满足报错
    assert 1 == 2
    print('qwe')

    自定义异常

    class EvaException(BaseException): #必须继承baseexcepyion
        def __init__(self,msg):
            self.msg = msg
        def __str__(self):  这个方法可以省略,在父类里面有这个方法
            return self.msg
    eva = EvaException('类型错误')   #就是实例化一个对象
    print(eva)
    class EvaException(BaseException): #必须继承baseexcepyion
        def __init__(self,msg):
            self.msg = msg
        def __str__(self):
            return self.msg
    try:
        raise EvaException('类型错误')
    except EvaException as e:#这里边的'e'就是一个类EvaException的对象   就是一个实例化的过程
        print(e)

     

  • 相关阅读:
    17、生鲜电商平台-异常模块的设计与架构
    16、生鲜电商平台-监控模块的设计与架构
    15、生鲜电商平台-售后模块的设计与架构
    14、生鲜电商平台-搜索模块的设计与架构
    13、生鲜电商平台-订单抽成模块的设计与架构
    12、生鲜电商平台-提现模块的设计与架构
    递归和回溯_leetcode77-经典的组合
    递归和回溯_leetcode52
    递归和回溯_leetcode51
    递归和回溯_leetcode46-经典的排列去重
  • 原文地址:https://www.cnblogs.com/xiao-xuan-feng/p/12374105.html
Copyright © 2020-2023  润新知