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)
    #======执行结果====
    我的异常
    
  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/qing-chen/p/7441213.html
Copyright © 2011-2022 走看看