单例模式、异常

一、设计模式

  • 单例模式:
    • 解释:
      • 只有一个实例(一个对象)
    • 场景:
      • 数据库连接池为一个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=‘\n‘)   # 此时,不管实例化多少次,只会返回第一次创建的实例

二、异常处理:

  • 异常种类:
    • 常用异常类:
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异常

时间: 2024-11-08 21:38:51

单例模式、异常的相关文章

Python 面向对象6 - 单例模式、异常

1.单例模式: 对于一个JDBC的连接池而言,如果来了一个用户,我们不需要重新创建一个连接池,只需要使用连接池里面的一个线程而已,因此在这种情况下,不需要重新创建一个新的对象,而只需要使用这个原有的对象.这种叫做单例模式. class Foo: INSTANCE = None #静态字段,用类来访问 def __init__(self,name): self.name = name @classmethod def get_instance(cls): if cls.INSTANCE: retu

Java设计模式学习笔记,一:单例模式

开始学习Java的设计模式,因为做了很多年C语言,所以语言基础的学习很快,但是面向过程向面向对象的编程思想的转变还是需要耗费很多的代码量的.所有希望通过设计模式的学习,能更深入的学习. 把学习过程中的笔记,记录下来,只记干货. 第一部分:单例模式的内容 单例模式:类只能有一个实例. 类的特点:1.私有构造器:2.内部构造实例对象:3.对外提供获取唯一实例的public方法. 常见的单例模式实现有五种形式: 1.饿汉式. 2.懒汉式. 3.双重检查锁式. 4.静态内部类式. 5.枚举式. 以下分别

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对

浅析单例模式与线程安全(Linux环境c++版本)

什么是单例模式 单例模式是设计模式中一种常用模式,定义是Ensure a class has only one instance, and provide a global point of access to it.(确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例) 用<设计模式之禅>里的话说,就是,在一个系统中,要求一个类有且仅有一个对象,如果出现多个就会出现"不良反应",比如以下情景可能会用到单例模式 要求生成唯一序列号的环境 在整个项目中需要一个共享

android在程序崩溃时Catch异常并处理

Android系统的"程序异常退出",给应用的用户体验造成不良影响.为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理.通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可. 写一个例子来理解. 1.新建项目,新建一个MyCatchException类,实现uncaughtExceptionHandler. //全部错误捕捉器 public class MyCatc

c++的单例模式及c++11对单例模式的优化

单例模式 单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目.但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了. 一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自身有关的数据,在这种情况下,每次都去new一个对象,即增加了开销,也使得代码更加臃肿.其实,我们只需要一个实例对象就可以.如果采用全局或者静态变量的方式,会

Android_程序未处理异常的捕获与处理

1.简单介绍 对于程序抛出的未被捕获的异常,可能会导致程序异常退出,界面不友好且应记录关键错误信息上传至server. 这里主要使用UncaughtExceptionHandler 2.代码实现 public class CrashHandler implements UncaughtExceptionHandler { public static final String TAG = CopyOfCrashHandler.class.getSimpleName(); // 系统默认的Uncau

你真的会写单例模式吗

原文出处: 吃桔子的攻城狮 单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好.用对单例模式,还真得费一番脑筋.本文对Java中常见的单例模式写法做了一个总结,如有错漏之处,恳请读者指正. 饿汉法 顾名思义,饿汉法就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建.代码如下: 1 2 3 4 5 6 7 public class Singleton {       private static Singleton = new Singleton();     priv

python 学习第八课 -- 异常 反射 socket

面向对象 相关 一.isinstance(obj,cls)  查看obj是否为cls的对象 issubclass(sub,super) 查看类sub是否为super的派生类 二. 异常处理 1.   异常基础 try: pass except Exception,e: print e e为Exception的对象,print e 就是print Exception中的__str__ 2.   异常种类 常用异常 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo