zoukankan      html  css  js  c++  java
  • 单例模式、异常

    一、设计模式
    • 单例模式:
      • 解释:
        • 只有一个实例(一个对象)       
      • 场景:
        • 数据库连接池为一个class,只应该实例化出一个连接池对象,每次请求都请求这个对象,从池中获取链接
        • 而不应该每个请求都实例化一个连接池对象
      • example:
    class Class1:
    obj = None   # 静态字段,用来保存创建的实例

    def __init__(self, name):
    self.name = name

    @classmethod  # 会使用静态字段,而类中的静态字段是使用 类名.字段进行访问,所以使用今天方法,cls获取类名称
    def get_inst(cls):
    if cls.obj:  # 若实例存在,则直接返回该实例
    return cls.obj
    else:
    cls.obj = cls('qiaogy')  # 调用__init__方法,创建一个实例,保存至静态字段中
    return cls.obj              # 返回该实例

    # 使用新的 get_inst 方法来去创建实例,在该方法内部判断
    # 若第一次获取,则创建实例;若后续获取,则返回第一次创建的实例
    obj1 = Class1.get_inst()
    obj2 = Class1.get_inst()
    print(obj1,obj2,sep=' ')   # 此时,不管实例化多少次,只会返回第一次创建的实例

    二、异常处理:
    • 异常种类:
      • 常用异常类
    AttributeError               试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
    IOError                          输入/输出异常;基本上是无法打开文件
    ImportError                    无法引入模块或包;基本上是路径问题或名称错误
    IndentationError             语法错误(的子类) ;代码没有正确对齐
    IndexError                     下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
    KeyError                        试图访问字典里不存在的键
    KeyboardInterrupt         Ctrl+C被按下
    NameError                    使用一个还未被赋予对象的变量
    SyntaxError                   Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
    TypeError                      传入对象类型与要求的不符合
    UnboundLocalError      试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
    ValueError                    传入一个调用者不期望的值,即使值的类型是正确的

      • 万能异常类:
    Exception        捕获所有异常错误
    • 完整格式
    # 所有正常代码
    try:
    pass

    # 异常执行代码精确匹配的写在上面,范围大的写在下面
    except IndexError as ex:
    print(ex)
    except Exception as ex:
    print(ex)

    else:
    # 没有任何异常,则执行该代码块
    pass
    finally:
    # 不论有没有异常,都执行该代码
    pass
    • 执行流程:
    try中:
    user_inp = input('number: ')
    b = int(user_inp)
    print(b)  # 若上面int异常,则直接跳到下面异常捕获段落,异常后面的代码是不会执行的,所以要卸载else或finally
    • 主动触发异常:
    try:
    raise Exception('主动错误信息')          # 在Exception类实例化,并传参数,相当于 self.message = ‘主动错误’
    except Exception as ex:
    print(ex)                                           # 相当于执行 __str__方法中,return self.message,return什么就显示什么

    此时:想抛什么抛什么,eg raise IndexError('xxx')

    • 自定义异常:
    # 自定义异常类,继承
    class MyException(Exception):
    def __init__(self, message):
    self.message = message

    def __str__(self):
    return self.message

    # 调用
    try:
    raise MyException('我的异常')
    except MyException as ex:
    pinrt(ex)



    三、断言:

    • assert 条件 ,条件为真,不报错;条件为假,抛异常
            assert 1==2  #  相当于if else + raise异常








     










  • 相关阅读:
    abp架构中加载公共css样式表和公共js的文件目录位置
    angular中[hidden]="expression"注意事项
    angular中使用canvas画布做验证码
    AngularJs页面跳转
    Angular学习笔记【如何正确使用第三方组件】
    【JavaScript权威指南】——逻辑与(&&)
    angular学习笔记【ng2-charts】插件添加
    OpenLayers v4.2.0 -----地图延迟加载;
    Sharepoint 图片库字段名称(Title)和对应的内部名称(InternalName)
    Sharepoint JSCOM 列表操作
  • 原文地址:https://www.cnblogs.com/qiaogy/p/5818652.html
Copyright © 2011-2022 走看看