美文网首页
python异常处理

python异常处理

作者: listems | 来源:发表于2020-04-09 15:08 被阅读0次

    异常

    • 异常是什么?
      Python用异常对象(exception object)来表示异常情况。
      遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(traceback, 一种错误信息)终止执行
    ipt = input("请输入:")
    num = int(ipt)
    print(num)   # valueError
    fl = float(ipt)
    print(fl)
    
    prin("")  #NameError: name 'prin' is not defined  代码执行停止
    a = 2
    print(a)
    

    捕获异常

    • 查看异常类型
      ipython交互环境下输入help(builtin)查看error
    In [1]: help(__builtin__)
    Help on built-in module builtins:
    
    • try-except-else-finally
    • 在日常维护中,需要把错误记录分类好写入日志,方便以后维护
      try:
      正常程序时,执行的代码块
      except:
      抛出异常时,捕捉异常,且自动执行该代码块
      else:
      没有出错,则执行else
      finally:
      不管出不出错,肯定执行
    try:    
        ipt = input("请输入")   
        num = int(ipt)    
        print(num)
    except Exception as e:  # Exception匹配了所有异常,把异常名称赋给了e 
    # 一旦有异常,执行except代码块    
        print(e)    
        num = 1    
        print(num)
        
    try:  # 正常执行时输出try里面代码 
        # li = [1,2]   
        # li[2]   # IndexError: list index out of range    
        a = 2    
        b = 0    
        c = a/b    
        print(c)  # ZeroDivisionError: division by zero
    except IndexError as e:   
        # 要分类记录好    
        print(e)
    except ZeroDivisionError as e:
        print(e)
    except Exception as e:    # exception 父类    
        print(e)
    else:   
        print("如何没有错误,执行else里面的代码")
    finally:  # 文件读写操作会用到    
        # f.close()   
        print("不管有没有异常,都执行")
    

    触发异常 raise

    • raise Exception()
    # 判断一下熟没有熟的状态
    def test(time):    
        if time < 5:
        raise Exception("还没有熟") # 没熟的异常
        
    try:
        test(4)
    except Exception as e:
        print(e)
    else:
        print("顾客请吃")
    
    # 模拟数据库
    def db():
        # 模拟数据库
        raise Exception("数据库错误")
        
    def demo():  
        try:  
        db() 
        except Exception as e:   
        print(e, "错误1")  # 记录数据库主动抛出的异常错误   
        try:        
        li = [1, 2]       
        print(li[3])    
        except Exception as e:   
        print(e, "错误2")   # 这里记录demo代码块的错误demo()
    

    自定义异常

    • 创建一个新的异常类,根据自己的需求拟定异常规则,继承Exception类
    class Mistake(Exception): # 继承父类Exception    
        def __init__(self,msg):       
            self.msg_error = msg    
        def __str__(self):   # 实例化时的返回信息        
            return self.msg_error
    
    try: 
        raise Mistake("电脑错了")   # 相当于实例化类
    except Exception as e:    
        print(e)
    

    断言assert

    • 形式:assert condition, your message
    • condition为True时,程序继续运行,下一个语句会被执行
    • condition为False时将会抛出AssertionError异常,该异常的信息为your message
    • assert常常用来调试和测试
    # print("----1----")
    # assert 1 == 2    # 一般用于强制用户服从
    # print("----2----")
    

    相关文章

      网友评论

          本文标题:python异常处理

          本文链接:https://www.haomeiwen.com/subject/yeecmhtx.html