• python 异常处理


    每日一记

    IndexError                索引超出序列的范围
    KeyError                  字典中查找一个不存在的关键字
    NameError                 尝试访问一个不存在的变量
    IndentationError          缩进错误
    AttributeError            尝试访问未知的对象属性
    StopIteration             迭代器没有更多的值
    AssertionError           断言语句(assert)失败
    EOFError                  用户输入文件末尾标志EOF(Ctrl+d)
    FloatingPointError        浮点计算错误
    GeneratorExit             generator.close()方法被调用的时候
    ImportError               导入模块失败的时候
    KeyboardInterrupt         用户输入中断键(Ctrl+c)
    MemoryError               内存溢出(可通过删除对象释放内存)
    NotImplementedError       尚未实现的方法
    OSError                   操作系统产生的异常(例如打开一个不存在的文件)
    OverflowError             数值运算超出最大限制
    ReferenceError            弱引用(weak reference)试图访问一个已经被垃圾回收机制回收了的对象
    RuntimeError              一般的运行时错误
    SyntaxError               Python的语法错误
    TabError                  Tab和空格混合使用
    SystemError               Python编译器系统错误
    SystemExit                Python编译器进程被关闭
    TypeError                 不同类型间的无效操作
    UnboundLocalError         访问一个未初始化的本地变量(NameError的子类)
    UnicodeError              Unicode相关的错误(ValueError的子类)
    UnicodeEncodeError        Unicode编码时的错误(UnicodeError的子类)
    UnicodeDecodeError        Unicode解码时的错误(UnicodeError的子类)
    UnicodeTranslateError     Unicode转换时的错误(UnicodeError的子类)
    ValueError                传入无效的参数
    ZeroDivisionError         除数为零
    

      

    异常处理

    1, 基本格式

    # 捕捉异常错误,防止异常抛错,终止程序.
    try:
        # 可能出现异常的代码
        lst = [1,2,3]
        print(lst[10])
    except:
        print("出现异常")
        
    # AssertError 断言失败错误
    """
    断言就是猜的意思
    assert 和 if 之间的区别在于
    assert 在断言失败时候,是直接报错,抛出异常,后面的代码直接终止了.
    if     在判断为False 的时候,不执行代码
    """
    

      

    2, 分支结构

    # except + 异常错误类 特指发生在这类异常错误时,要执行的分支
    try:
        lst = [1,2,3]
        print(lst[10])
    except KeyError :
        print("没有这个键而发生错误")
    except IndexError :
        print("索引超出范围!")
        
    # 只执行第一次报错的特指异常,往后不再执行
    

      

    3, 迭代器异常错误处理

    def gen_func():
        print("生成器")
        yield 1
        yield 2
        yield 3
        return 4
    try :
        gen = gen_func()
        print(next(gen))
        print(next(gen))
        print(next(gen))
        print(next(gen))          # 没有执行return语句,因为错误
    except StopIteration as e :   # e是对象,底层有__str__方法,print时自动触发
        print(e,"生成器迭代结束!")
    

      

    4, 异常处理大组合

    # try , except , else , finally 
    try:
        lst = [1,2,3]
        print(lst[10])
    except KeyError:
        print("没有这个键而发生错误")
    except IndexError :
        print("索引超出范围!")
    else :
        print("没有异常")
    finally:
        print("无论如何都要执行")
    

      

    5, 主动抛出异常 raise

    # 基本格式
    try:
        raise BaseException
    except BaseException:
        print("出现错误")
    

      

    5.1,自定义异常类

    # 系统底层获取行数和文件名的函数 (只有在程序异常时才能触发) 
    def return_errorinfo(n):
        import sys
        f = sys.exc_info()[2].tb_frame.f_back
        if n==1:        
            return str(f.f_lineno)       # 返回当前行数
        elif n == 2:    
            return f.f_code.co_filename  # 返回文件名
     
    # 自定义错误信息类
    class MyException(BaseException):
        def __init__(self,num,msg,line,file):
            # 错误号
            self.num = num
            # 错误信息
            self.msg = msg
            # 错误行号
            self.line = line
            # 错误文件
            self.file = file
    ​
    # 主动抛出异常
    def raise_func(n):
        try :
            raise
        except:
            return return_errorinfo(n)
    ​
    # 捕捉自定义异常类信息
    sex = "雌雄同体"
    try:
        if sex == "雌雄同体":
            # raise + 异常错误类 或者 异常错误类对象
            raise MyException(404,"醒醒吧老弟,人类没有雌雄同体~",get_value(1),get_value(2))
    ​
    except MyException as e:
        # 对象.属性 
        print(e.num)
        print(e.msg)
        print(e.line)
        print(e.file)
    

      

     

     

  • 相关阅读:
    vue 路由跳转传参
    vue better-scroll 下拉上拉,加载刷新
    H5点击拨打电话,发短信
    vue搭建项目
    How to determine the socket connection up time on Linux
    @ContextConfiguration注解
    MySQL修改主键属性
    软件测试工程师面试(一)
    Python实现不同格式打印九九乘法表
    MySQL 5.1安装和配置过程中遇到的问题
  • 原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/13472321.html
Copyright © 2020-2023  润新知