zoukankan      html  css  js  c++  java
  • python异常处理

    异常处理

    程序运行过程中有时间会遇到一些错误,比如调用一些没有定义的方法、变量或者有些验证不严格,传入到后台会报各种各样的错误。那么显示这些错误信息对用户来说是不友好的。

    在Python中有一套异常处理机制来帮助我们进行错误处理(try...except...finally)。

    当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块,至此,执行完毕。

    比如调用一个没有定义的key,那么会报错说key不存在。

    data={}
    data['name'] #KeyError: 'name'
    

     加入异常处理之后:

    try:
        data['name']   #
    except KeyError as e:
        print('不存在的key',e) #不存在的key 'name'
    

     try代码块写的是可能会保错的代码,except 用来捕捉错误。相当于switch case。

    如果有多种错误预判:

    data={}
    data1 = []
    
    try:
        data1[1]
        data['name']
    except KeyError as e:
        print('不存在的key',e)
    except IndexError as e:
        print('列表操作错误',e)
    finally:
        print('执行结束')
    
    #=========执行结果=========
    列表操作错误 list index out of range
    执行结束
    

     加入了一个finally,finally语句是一定会执行的。不管有没有执行except。

    也可以把多个错误写到一起。

    data={}
    data1 = []
    
    try:
        data1[1]
        data['name']
    except (KeyError,IndexError) as e:
        print('不存在的key',e)
    finally:
        print('执行结束')
    #==========执行结果======
    不存在的key list index out of range
    执行结束
    

     虽然写一起减少了代码,但是你不知道到底是哪个报的错。如果这两种错误都是用统一的处理方法的时候可以这么写。

    Exception可以抓所有的错误,不建议一开始就使用。

    data={}
    data1 = []
    
    try:
        open('test.txt')
        data1[1]
        data['name']
    except (KeyError,IndexError) as e:
        print('不存在的key',e)
    except Exception as e:
        print('未知错误',e)
    finally:
        print('执行结束')
    
    #=====执行结果==========
    未知错误 [Errno 2] No such file or directory: 'test.txt'
    执行结束
    

     也可以在加一个else,表示一切正常。

    try:
        a = 1
        print(a)
    except (KeyError,IndexError) as e:
        print('不存在的key',e)
    except Exception as e:
        print('未知错误',e)
    
    else:
        print('一切正常')
    finally:
        print('执行结束')
    #======执行结果====
    1
    一切正常
    执行结束
    

     自定义异常:

    class MyException(Exception):
        def __init__(self,msg):
            self.message = msg
    
        def __str__(self):
            return self.message
    try:
        raise MyException('我的异常') #触发异常
    except  MyException as e:
        print(e)
    #======执行结果====
    我的异常
    
  • 相关阅读:
    STDMETHOD_,STDMETHOD,__declspec(novtable)和__declspec(selectany)
    __stdcall 与 __cdecl
    winows 进程通信的实例详解
    Windows 下多线程编程技术
    MFC/VC++ UI界面美化技术
    VC++中 wstring和string的互相转换实现
    VS2010项目转化为VS2008项目
    VC++ 响应回车键的2种方法
    高效 告别996,开启java高效编程之门 2-4实战:单一条件参数化
    高效 告别996,开启java高效编程之门 2-3实战:硬编码业务逻辑
  • 原文地址:https://www.cnblogs.com/qing-chen/p/7441213.html
Copyright © 2011-2022 走看看