#异常:是指在语法正确的前提下,程序运行时报错就是异常
try:
print(1/0) #0不能做除数,这里是错的
except ZeroDivisionError as e:#注意的是这里的错误类型要与出现的错误对应,如果不对应是不能捕捉到异常的,依旧会报错
print("出错",e)
#捕获多个异常
#1个try 多个except捕捉异常,只会执行捕捉到异常的语句,其他捕捉异常的语句不会执行
#注意的是若出现多个异常,只会执行第一个先出现的异常
try:
print(1/0)
b=[1,2]
print(b[2])
except IndexError as f:
print("出错2",f)
except ZeroDivisionError as e:
print("出错1",e)
#捕获所有异常:两种方式都是只能捕获所有异常,但不能知道就是是那种
#格式1
try:
print(3/0)
b=[1,2,3]
print(b[3])
except: #except 后面不写异常类型,表示可以捕获所有的异常
print("出错啦")
#格式2
try:
print(3/0)
b=[1,2,3]
print(b[3])
except Exception: #Exception 是所有异常的父异常 ,try中抛出的异常,Exception都能捕获
print("出错")
#else格式 如果try中没有抛出异常则执行else中的代码,如果try中抛出了异常则不会执行else中的代码
try:
print("hahha")
print(1/0)
except:
print("捕获到异常")
else:
print("没有发生异常")
#try…finally 格式:不管try中是否抛出异常最终都会执行finally中的代码
try:
print("aaa")
print(1/0)
lst=[]
print(lst[0])
except ZeroDivisionError as e:
print(e)
except IndexError as e:
print(e)
finally:
print("无论有没有异常都会执行这句话")
#异常触发
#1、抛出系统异常:
while True:
name = input("请输入姓名(不少于三个字)")
try:
if len(name)<3:
raise Exception("字数太少,请重新输入。")
else:
pwd = input("请输入密码:")
print(name,pwd)
except Exception as e:
print(e)
#抛出自定义的异常:当程序中的异常不满足时,我们可以自定义类型异常
class ShortInputException(Exception):#继承Exception类
def __init__(self,msg):
self.msg=msg
def __str__(self):
return str(self.msg)
try:
raise ShortInputException("异常")
except ShortInputException as e:
print(e)
#设计模式
#1、单例模式:改模式主要目的是确保某一个类只有一个实例存在
class Sun():
__instance=None
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance=object.__new__(cls)
return cls.__instance
else:
return cls.__instance
def __init__(self,name):
self.name=name
a=Sun("你好")
b=Sun("我好")
print(a.name)
print(b.name)
#a和b 都是我好
print(a==b)#True
print(a is b)#True
#优化写法
class Sun():
__instance=None
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance=object.__new__(cls)
return cls.__instance
def __init__(self,name):
self.name=name
a=Sun("你好")
b=Sun("我好")
print(a.name)
print(b.name)
print(a==b)
print(a is b)
#2、工厂模式 是一个在软件开发中用来创建对象的设计模式
class BMW():
def run(self):
print("宝马跑")
def stop(self):
print("宝马停")
class Benz():
def run(self):
print("奔驰跑")
def stop(self):
print("奔驰停")
class Audi():
def run(self):
print("奥迪跑")
def stop(self):
print("奥迪停")
class CarFatory():
@classmethod
def makeCar(cls,name):
if name=="宝马":
return BMW()
elif name=="奔驰":
return Benz()
elif name=="奥迪":
return Audi()
a=CarFatory.makeCar("宝马")
b=CarFatory.makeCar("奔驰")
c=CarFatory.makeCar("奥迪")
a.run()
b.run()
c.run()
a.stop()
b.stop()
c.stop()
#策略模式 为达到某个目的而采取的多种方法或手段
class CashNormal():
def __init__(self):
pass
def getMoney(self,money):
return money
class CashRate():
def __init__(self,rate):
self.rate=rate
def getMoney(self,money):
return self.rate*money
class CashReturn():
def __init__(self,condition,ret):
self.condition=condition
self.ret=ret
def getMoney(self,money):
return money-money//self.condition*self.ret
class Celue():
def __init__(self,obj):
self.obj=obj
def getMoney(self,money):
return self.obj.getMoney(money)
if __name__=="__main__":
zd={}
money=float(input("请输入金额"))
zd[0]=Celue(CashNormal())
zd[1]=Celue(CashRate(0.8))
zd[2]=Celue(CashReturn(300,50))
ce=int(input("请输入消费策略"))
if ce not in zd:
ce=0
fuqian=zd[ce].getMoney(money)
print(fuqian)
#观察者模式
class Boss():
def __init__(self):
self.status=""
self.observers=[]
def append(self,oberser):
self.observers.append(oberser)
def update(self):
for obj in self.observers:
obj.update()
class A():
def __init__(self,name,boss):
self.name=name
self.boss=boss
class YeWuEmployee(A):
def update(self):
print("业务组{}别玩了,{}".format(self.name,self.boss.status))
class CaiWuEmployee(A):
def update(self):
print("财务组{},{}今天去饭店".format(self.name,self.boss.status))
if __name__=="__main__":
x=Boss()
x1=YeWuEmployee("张三",x)
x2=CaiWuEmployee("李四",x)
x.status="老板回国啦"
x.append(x1)
x.append(x2)
x.update()
作业
#1、定义一个函数func(filename) filename:文件的路径,函数功能:打开文件,并且返回文件内容,最后关闭,用异常来处理可能发生的错误。
def func():
try:
f=open("dd",encoding="utf-8")
except Exception as e:
print(e)
else:
print(f.read())
f.close()
func()
2、编写一个计算减法的方法,当第一个数小于第二个数时,抛出“被减数不能小于减数"的异常
def jisuan(a,b):
try:
if a<b:
raise Exception(“被减数不能小于减数”)
else:
print(a-b)
except Exception as e:
print(e)
a=jisuan(2,3)
#3、定义一个函数func(listinfo) listinfo:为列表,listinfo = [133, 88, 24, 33, 232, 44, 11, 44], 返回列表小于100,且为偶数的数
def func(listinfo):
try:
result = filter(lambda k: k < 100 and k % 2 == 0, listinfo)
except Exception as a:
return a
else:
b=[]
for x in result:
b.append(x)
print(b)
func([133, 88, 24, 33, 232, 44, 11, 44])