• 异常处理


    知识储备

    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 """
    自定义异常
  • 相关阅读:
    [转]22条经典的编程引言 朱燚:
    [转]Windbg的学习记录(一) 朱燚:
    C#7.0 模式匹配与if语句
    使用switch表达式简化switch语句
    .Net 5 在函数中使用Lambda
    MongoDB find getmore操作慢问题排查
    multikey索引和wildCard索引场景比较
    一个高性能跨平台基于Python的Waitress WSGI Server的介绍!
    郁闷的一天!
    互联网项目管理要点
  • 原文地址:https://www.cnblogs.com/limengjie0104/p/8871883.html
Copyright © 2020-2023  润新知