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

    知识储备

    1、什么是异常

     

      异常是错误发生的信号

      程序一旦出错,如果程序中还没有相应的处理机制,那么该错误就会产生一个异常抛出,程序的运行也随之中止。

    try 和 if  的区别

    if:是可预知的错误或异常场景。

    try:是不可预知的异常场景,且异常已发生做出的应对手段。

    分支判断:

     1 try:
     2     print('start...')
     3     x = 1
     4     y
     5     l = []
     6     # l[3]
     7     d = {'a':1}
     8    # d['b']
     9     import os
    10     os.aaa
    11     print('end...')
    12 except NameError:
    13    print('变量名未定义')
    14 except KeyError:
    15    print('字典的key不存在')
    16 except IndexError:
    17    print('索引超出列表的范围')
    18 
    19 print('other...')
    20 
    21 """
    22 start...
    23 变量名或者字典的key或者列表的索引有问题
    24 other...
    25 """
    分支判断

    注意:

    粗略的判断:

     1 try:
     2     print('start...')
     3     x = 1
     4     y
     5     l = []
     6     # l[3]
     7     d = {'a':1}
     8    # d['b']
     9     import os
    10     os.aaa
    11     print('end...')
    12 except (NameError,KeyError,IndexError):
    13    print('变量名或者字典的key或者列表的索引有问题')
    14 
    15 print('other...')
    16 
    17 """
    18 start...
    19 变量名或者字典的key或者列表的索引有问题
    20 other...
    21 """
    粗略的判断

    万能异常(初级):

     1 try:
     2     print('start...')
     3     x = 1
     4     y
     5     l = []
     6     # l[3]
     7     d = {'a':1}
     8    # d['b']
     9     import os
    10     os.aaa
    11     print('end...')
    12 except Exception:
    13    print('万能异常--》')
    14 
    15 print('other...')
    16 
    17 """
    18 start...
    19 万能异常--》
    20 other...
    21 """
    万能-初级

    万能异常(高级):

     1 try:
     2     print('start...')
     3     x = 1
     4     y
     5     l = []
     6     # l[3]
     7     d = {'a':1}
     8    # d['b']
     9     import os
    10     os.aaa
    11     print('end...')
    12 except Exception as e:
    13    print('万能异常--》',e)
    14 
    15 print('other...')
    16 
    17 """
    18 start...
    19 万能异常--》 name 'y' is not defined
    20 other...
    21 """
    万能-高级

    正题总结

    # try:...else...
    # else不能单独使用,必须与except连用,意思是:else的子代码快在程序没检测到任何异常的情况下执行
     1 try:
     2     print('start...')
     3     x = 1
     4     # y
     5     l = []
     6     # l[3]
     7     d = {'a':1}
     8     # d['b']
     9     import os
    10     # os.aaa
    11     print('end...')
    12 
    13 except Exception as e:
    14     print('万能异常--》',e)
    15 
    16 else:
    17     print('else的子代码快在程序没检测到任何异常的情况下执行')
    18 
    19 print('other...')
    20 
    21 """
    22 start...
    23 end...
    24 else的子代码快在程序没检测到任何异常的情况下执行
    25 other...
    26 """
    # try:...finally...
    # 完整语法如下:
     1 try:
     2     print('start...')
     3     x = 1
     4     y
     5     l = []
     6     # l[3]
     7     d = {'a':1}
     8     # d['b']
     9     import os
    10     # os.aaa
    11     print('end...')
    12 
    13 except Exception as e:
    14     print('万能异常--》',e)
    15 
    16 else:
    17     print('else的子代码快在程序没检测到任何异常的情况下执行')
    18 finally:
    19     print('无论有没有异常发生,都会执行')
    20 
    21 print('other...')
    22 
    23 """
    24 start...
    25 万能异常--》 name 'y' is not defined
    26 无论有没有异常发生,都会执行
    27 """

     # 主动触发异常

     1 class People:
     2     def __init__(self,name):
     3         if not isinstance(name,str):
     4             raise TypeError('%s 必须是str类型' % name)
     5         self.name = name
     6 p = People(123)
     7 
     8 
     9 """
    10 raise TypeError('%s 必须是str类型' % name)
    11 TypeError: 123 必须是str类型
    12 """
    View Code

     # 断言

     1 print('part1...')
     2 
     3 # stu = ['egon','alex']
     4 stu = []
     5 
     6 assert len(stu) > 0
     7 
     8 print('part2...')
     9 print('part3...')
    10 
    11 
    12 """
    13 part1...
    14 AssertionError
    15 """
    View Code

     # 自定义异常处理

     1 # 自定义异常
     2 class RegisterError(BaseException):
     3     def __init__(self,user,msg):
     4         self.user = user
     5         self.msg = msg
     6 
     7     def __str__(self):
     8         return '<%s : %s>' % (self.user,self.msg)
     9 
    10 # raise RegisterError,意指抛出RegisterError类生成的对象(obj)并打印之,故可在RegisterError类中自定义__str__方法,实现定制化异常处理
    11 # obj = RegisterError(xxx)
    12 # print(obj)
    13 raise RegisterError('使用者','注册失败')
    14 
    15 
    16 """
    17 raise RegisterError('使用者','注册失败')
    18 __main__.RegisterError: <使用者 : 注册失败>
    19 """
    自定义异常
  • 相关阅读:
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 136 只出现一次的数字
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 135 分发糖果
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 134 加油站
    Java实现 LeetCode 133 克隆图
  • 原文地址:https://www.cnblogs.com/limengjie0104/p/8871883.html
Copyright © 2011-2022 走看看