环境
  虚拟机:VMware 10
  Linux版本:CentOS-6.5-x86_64
  客户端:Xshell4
  FTP:Xftp4
  python3.6

一、设计模式
1、单例模式
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,单例模式是一种对象创建型模式。

class Singleton(object):
__instance=None
__first_init=False def __new__(cls,name,age):
if not cls.__instance:
cls.__instance=object.__new__(cls);
return cls.__instance
def __init__(self,name,age):
if not self.__first_init:
self.name=name
self.age=age
Singleton.__first_init=True a=Singleton('bin',18)
b=Singleton('bin',8)
#只有一个实例
print(id(a))
print(id(b))
#只初始化一次
print(a.age)
print(b.age)
#修改属性
a.age=19
print(b.age)

2、工厂模式
2.1、Simple Factory模式不是独立的设计模式,他是Factory Method模式的一种简单的、特殊的实现。他也被称为静态工厂模式,通常创建者的创建方法被设计为static方便调用。
(1)静态的工厂类
(2)用全局函数改写工厂类

class Person(object):
def __init__(self,name):
self.name=name
def work(self,type):
print('%s开始工作了'%self.name)
ax=Factory.create_axe(self, type)
ax.cut_tree() class Axe(object):
def cut_tree(self):
print('开始砍树了')
class StoneAxe(Axe):
def cut_tree(self):
print('石斧砍树')
class SteelAxe(Axe):
def cut_tree(self):
print("使用钢斧头砍树")
class WaterAxe(Axe):
def cut_tree(self):
print("使用水砍树") class Factory(object):
@staticmethod
def create_axe(self,ax_type):
if ax_type=='stone':
return StoneAxe()
elif ax_type=='steel':
return SteelAxe()
elif ax_type=='water':
return WaterAxe()
else:
print('类型错误')
p=Person('光头强')#光头强开始工作了
p.work('steel')#使用钢斧头砍树

2.2、工厂方法模式
工厂方法模式去掉了简单工厂模式中工厂方法的静态方法,使得它可以被子类继承。对于python来说,就是工厂类被具体工厂继承。这样在简单工厂模式里集中在工厂方法上的压力可以由工厂方法模式里不同的工厂子类来分担。
抽象的工厂类提供了一个创建对象的方法,也叫作工厂方法。
(1) 抽象工厂角色(Factory): 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。
(2) 具体工厂角色(Stone_Axe_Factory,Steel_Axe_Factory):它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
(3) 抽象产品角色(Axe):它是具体产品继承的父类或者是实现的接口。在python中抽象产品一般为父类。
(4) 具体产品角色(Stone_Axe,Steel_Axe):具体工厂角色所创建的对象就是此角色的实例。由一个具体类实现。

二、异常
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。
1、捕获异常

try:
f=open('123.txt','r')
except IOError:
print('文件打开报错')

2、当捕获多个异常时,可以把要捕获的异常的名字,放到except 后,并使用元组的方式仅进行存储

try:
f=open('123.txt','r')
print(num)
except (IOError,NameError):
pass

3、获取异常的信息描述

try:
f=open('123.txt','r')
except Exception as result:
print(result)

4、捕获所有异常

except后面不跟具体错误类型或者跟Exception

try:
f=open('123.txt','r')
except:
pass

try:
f=open('123.txt','r')
except Exception as result:
print(result)

5、else,如果没有捕获到异常,那么就执行else中的事情

try:
num = 100
print(num)
except NameError as errorMsg:
print('产生错误了:%s'%errorMsg)
else:
print('没有捕获到异常,真高兴')

6、 try...finally...

在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。

import time
try:
f=open('txt')
try:
while True:
content=f.readline()
if len(content)==0:
break
print(content)
time.sleep(2)
except TypeError as ex:
pass
finally:
f.close()
print('关闭文件')
except:
print('没有这个文件')

7、异常的传递

如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递

如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样.

8、自定义异常
用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。

class ShortInputException(Exception):
def __init__(self,length,atleast):
super().__init__()
self.length=length
self.atleast=atleast
def main():
try:
s=input('请输入->')
if len(s)<3:
raise ShortInputException(len(s),3)
except ShortInputException as result:
print('ShortInputException: 输入的长度是 %d,长度至少应是 %d'% (result.length, result.atleast))
else:
print('没有异常发生.')

9、异常处理中抛出异常

class Test(object):
def __init__(self,switch):
self.switch=switch
def cacl(self,a,b):
try:
return a/b
except Exception as ex:
if self.switch:
print("捕获开启,已经捕获到了异常,信息如下:")
print(result)
else:
raise
a=Test(True)
a.cacl(11, 0)
print("----------------------华丽的分割线----------------")
a.switch = False
a.calc(11,0)

参考:
Python学习笔记

【Python学习之八】设计模式和异常的更多相关文章

  1. 【python学习笔记】8.异常

    [python学习笔记]8.异常 raise Exception: 抛出指定异常 try/except: 捕捉异常 except: 第一个参数是需要捕获的异常类型,可以是多个类型组成元组,第二个参数是 ...

  2. Python学习笔记:07异常

    异常 Python用异常对象(Exception Object)来表示异常情况,当异常未被捕获时,就会产生回溯(Traceback) 异常分类 內建异常类:Exception,AttributeErr ...

  3. Python学习_07_错误、异常

    地毯式地过语法终于快要结束了... Python中的常见异常 1.NameError:尝试访问一个未初始化的变量 2. ZeroDivisionError:除数为0 3. SyntaxError:Py ...

  4. python学习笔记(七)、异常

    在实际开发中,往往不会出现一个系统编写下来,没有出现任何一个bug.为处理这种会出现错误的地方,如除数为零的除法,python提供了非常强大的机制————异常处理机制. 1 异常 python使用异常 ...

  5. python学习笔记十:异常

    一.语法 #!/usr/bin/python filename='hello' #try except finally demo try: open('abc.txt') print hello ex ...

  6. python学习二(文件与异常)

    Python中使用open BIF与文件交互,与for语句结合使用,一次读取一行 读取文件sketch.txt,文件内容如下: Man: Ah! (taking out his wallet and ...

  7. python学习(八) 异常

    8.1 什么是异常 8.2 按自己的方式出错 如何引发异常,以及创建自己的异常类型. 8.2.1 raise语句 >>> raise Exception Traceback (mos ...

  8. 【Python学习之八】ORM

    ORM 什么是ORM呢? ORM全称是:Object-Relational Mapping.即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表.这样,写代码更简单,不用直接 ...

  9. Python学习 Part6:错误和异常

    Python学习 Part6:错误和异常 两种不同类型的错误:语法错误和异常 1. 语法错误 语法错误,也被称作解析错误: >>> while True print('Hello w ...

随机推荐

  1. toB创业中的5个行动原则- SaaS创业路线图

    https://www.iyiou.com/p/84471.html 1.硬骨头原则 很多创业者急于求成,这做不好toB创业. 举例来说,产品价值阶段如果发现效果不明显,硬要推进到营销阶段在销售上想办 ...

  2. 域权限维持:Ptk(Pass The Ticket)

    Kerberos协议传送门:https://www.cnblogs.com/zpchcbd/p/11707302.html 1.黄金票据 2.白银票据

  3. Mycat 全局系列号(转载)

    概述 本篇文章介绍mycat怎样在分库分表的情况下保证主键的全局唯一方法,接下来就来分析三种方法各自的优缺点. 配置 文件方式获取 1.修改server配置文件 vim server.xml < ...

  4. learning java FileInputStream

    public class FileInputStreamTest { public static void main(String[] args) throws IOException { var f ...

  5. git的搭建和使用

    目录: 1.git与github介绍2.下载安装Git-20-64-bit.exe3.Git常用命令 git与github介绍 Git是什么 Git是一个开源的[分布式][版本控制系统],用于敏捷高效 ...

  6. SQL基础-过滤数据

    一.过滤数据 1.使用WHERE子句 过滤数据:关键字WHERE SELECT 字段列表 FROM 表名 WHERE 过滤条件; 过滤条件一般由要过滤的字段.操作符.限定值三部分组成: 如: SELE ...

  7. 转载:四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍

    四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍 时间 2016-07-22 16:57:00 炼数成金 相似文章 (5) 原文  http://www.dataguru.cn/ ...

  8. powershell.exe WannaCrypt(永恒之蓝) down.bddp.net

    今天win机器进程出现大量 powershell.exe,把cpu占满100%,打开任务管理器看到如下信息: powershell -nop -w hidden -ep bypass -c " ...

  9. 安利一个github上面的一个神级库thefuck,Linux命令敲错了,没关系,自动纠正你的命令

    没错就是这么神奇,名字相当噶性,thefuck.当你命令输入错误不要怕,直接来一句fuck,自动纠正你输入的命令. 在你输入错误的命令的时候,忍俊不禁的想来一句fuck,没错你不仅可以嘴上说,命令里面 ...

  10. python下浏览器静默运行驱动

    此处以chromdriver为例,放置driver路径问题参看上一篇问题.和java处理差不多,python实现静默运行方式如下 首先解答为什么进行静默运行? 我们在本地一般便于调试可以用GUI界面运 ...