约束、异常处理、加密及日志

一、约束

1、通过继承来约束派生类的内部必须要实现的方法

 1 class BaseMessage(object):
 2     def send(self,x1):
 3         """
 4         必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
 5         """
 6         raise NotImplementedError(".send() 必须被重写.")
 7 
 8 class Email(BaseMessage):
 9     def send(self,x1):
10         """
11         必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
12         """
13         pass
14 
15 
16 obj = Email()
17 obj.send(1)

抛出异常:raise NotImplementedError()
2、通过继承抽象类来完成约束

继承抽象类并实现抽象类里的抽象方法、从而达到约束 (抽象类里除了抽象方法外也可以包含实例方法)

 1 abstact class Foo:
 2     def f1(self):
 3         print(1,3,4) 
 4                             
 5 abstact def f2(self):pass
 6                     
 7 class Bar(Foo):
 8     def f2(self):
 9         print('111')
10                             

3、通过接口也可以实现约束
接口是一种数据类型,接口里都是未实现的方法,通过继承接口,完成所有方法

二、异常处理

 1 import os
 2 
 3 class ExistsError(Exception):
 4     pass
 5 
 6 class KeyInvalidError(Exception):
 7     pass
 8 
 9 def new_func(path,prev):
10     """
11     去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
12         1000,成功
13         1001,文件不存在
14         1002,关键字为空
15         1003,未知错误
16         ...
17     :return:
18     """
19     response = {'code':1000,'data':None}
20     try:
21         if not os.path.exists(path):
22             raise ExistsError()
23 
24         if not prev:
25             raise KeyInvalidError()
26         pass
27     except ExistsError as e:
28         response['code'] = 1001
29         response['data'] = '文件不存在'
30     except KeyInvalidError as e:
31         response['code'] = 1002
32         response['data'] = '关键字为空'
33     except Exception as e:
34         response['code'] = 1003
35         response['data'] = '未知错误'
36     return response

自定义异常:

1 class MyException(Exception):
2     def __init__(self,code,msg):
3         self.code = code
4         self.msg = msg
5 try:
6     raise MyException(1000,'操作异常')  #实例化,将数据封装
7 
8 except MyException as obj: 
9     print(obj.code,obj.msg)       #打印出异常
 1 class MyException(Exception):
 2     def __init__(self,code,msg):
 3         self.code = code
 4         self.msg = msg
 5 try:
 6     raise MyException(1000,'操作异常')
 7 
 8 except KeyError as obj:
 9     print(obj,1111)
10 except MyException as obj: #捕获异常就处理
11     print(obj,2222)
12 except Exception as obj:   # 捕获所有类型异常
13     print(obj,3333)

三、加密
1、普通加密密码

1 import hashlib
2 
3 def md5():
4     obj=hashlib.md5()
5     obj.update("admin".encode("utf-8"))
6     return obj.hexdigest()
7 ret=md5()
8 print(ret)    #21232f297a57a5a743894a0e4a801fc3  admin加密后的密码

2、加盐

 1 import hashlib
 2 
 3 salt=b"sadasfdsfdfgd23ew23ewr"  #加盐
 4 def md5():
 5     # 实例化对象
 6     obj=hashlib.md5(salt)
 7     # 写入要加密的字节
 8     obj.update("admin".encode("utf-8"))
 9     # 获取密文
10     return obj.hexdigest()
11 ret=md5()
12 print(ret)        #ae224d80a1cd1ab295f73fe335eb8516

3、验证用户登录

 1 import hashlib
 2 
 3 salt=b"sadasfdsfdfgd23ew23ewr"
 4 def md5(pwd):
 5     # 实例化对象
 6     obj=hashlib.md5(salt)
 7     # 写入要加密的字节
 8     obj.update(pwd.encode("utf-8"))
 9     # 获取密文
10     return obj.hexdigest()
11 
12 pwd=input("请输入密码")
13 ret=md5(pwd)
14 if ret=="ae224d80a1cd1ab295f73fe335eb8516":
15     print("登录成功")
16 else:
17     print("登录失败")

四、日志处理

猜你喜欢

转载自www.cnblogs.com/liaopeng123/p/9566902.html