Python 约束 , 自定义异常 , 加密 , 日志
2021-07-09 08:05
标签:style none dha 异常 put level 密文 ESS ddb Python中 语法: 有主动抛异常 (如上) 还有 抽象类和抽象方法: 总结 : 应用场景 : 多个类 , 内部都必须有某些方法时 , 需要使用基类 + 异常进行约束 解释: 上面定义已知异常类 , 继承 Exception 类 , 下面接收该设置的已知异常类, 并可以设置返回结果 , 最后写一个接收未知异常 (Exception) 例如 : 用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 一般用加密密码 防止数据库被盗 ,密码泄露 此加密无法解密 例如: 用于便捷记录日志且线程安全的模块 注 : 只有[当前写等级] 大于等于[日志等级] 时 ,日志文件才被记录 日志记录格式: 对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件, logging.basicConfig 将无法完成, 需要自定义和日志操作对象. 如上述创建的两个日志对象 引用 traceback 模块 Python 约束 , 自定义异常 , 加密 , 日志 标签:style none dha 异常 put level 密文 ESS ddb 原文地址:https://www.cnblogs.com/heshun/p/9567850.html 约束
约束 , 约束其派生类: 保证派生类中必须编写send方法 , 不然执行可能就会报错
1 class BaseMessage(object):
2 def send(self):
3 """"
4 必须继承BaseMessage,然后其中必须编写send方法, 用于完成具体业务
5 """
6 raise NotImplementedError(".send()必须被重新写")
7 # raise Exception (".send(), 必须被重新写") 这种不专业 , 没有研究过低层, 及Javaa
8
9 class Email(BaseMessage):
10 def send(self,x1):
11 """
12 必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
13 """
14 pass
15
16 obj = Email()
17 obj.send(1)
Python中约束的方式 :
自定义异常
1 # 自定义异常
2 import os
3
4 class ExistsError(Exception):
5 pass
6
7 class KeyInvalidError(Exception):
8 pass
9
10 def func(path,prev):
11 """
12 去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
13 1000, 成功
14 1001, 文件不存在
15 1002, 关键字为空
16 1003, 未知错误
17 ...
18
19 :return:
20 """
21 response = {"code":1000,"data":None}
22 try:
23 if not os.path.exists(path): # 判断路径是否存在
24 raise ExistsError()
25 if not prev:
26 raise KeyInvalidError()
27
28 """
29 代码块
30 """
31 except ExistsError as e:
32 response[‘code‘] = 1001
33 response[‘data‘] = ‘文件不存在‘
34 except KeyInvalidError as e:
35 response[‘code‘] = 1002
36 response[‘data‘] = ‘关键字为空‘
37 except Exception as e:
38 response[‘code‘] = 1003
39 response[‘data‘] = ‘未知异常‘
40 return response
41 print(func("E:\Python",""))
加密
引用 import hashlib 模块 可以将字符串加密成密文
1 import hashlib
2
3 heshun = b"hehsun123456" # 自定义添加的特有的加密
4
5 def md5(pwd):
6 # 初始化对象
7 obj = hashlib.md5(heshun)
8 # 写入加密字节
9 obj.update(pwd.encode("utf-8"))
10 # 获取密文
11 return obj.hexdigest()
1 import hashlib
2
3 SALT = b‘heshun123456‘
4
5 def md5(pwd):
6 # 实例化对象
7 obj = hashlib.md5(SALT)
8 # 写入要加密的字节
9 obj.update(pwd.encode(‘utf-8‘))
10 # 获取密文
11 return obj.hexdigest()
12
13
14 user = input("请输入用户名:")
15 pwd = input("请输入密码:")
16 if user == ‘qq123456‘ and md5(pwd) == ‘94394d9d8f30ed2dd8259819c60b9c54‘:
17 print(‘登录成功‘)
18 else:
19 print(‘登录失败‘)
日志
引用 logging 模块
1 , 单文件日志
import logging
logging.basicConfig(filename="rizhi.txt",
format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘,
datefmt=‘%Y-%m-%d %H:%M:%S %p‘,
level=10)
logging.debug("日志显示")
logging.info("日志显示")
logging.warning("日志显示")
logging.error("日志显示")
logging.critical("日志显示")
logging.log(10,"log")filename = "路径"
format = "时间" - "用户" - "级别名称"-"路径"- "消息提示"
datefmt = ‘%Y-%m-%d %H:%M:%S %p‘ #格式化时间
level = " 等级" 报错等级多少以上才显示
日志等级
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
多文件处理日志
# 定义文件
file_1_1 = logging.FileHandler(‘l1_1.log‘, ‘a‘, encoding=‘utf-8‘)
fmt = logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s")
file_1_1.setFormatter(fmt)
file_1_2 = logging.FileHandler(‘l1_2.log‘, ‘a‘, encoding=‘utf-8‘)
fmt = logging.Formatter()
file_1_2.setFormatter(fmt)
# 定义日志
logger1 = logging.Logger(‘s1‘, level=logging.ERROR)
logger1.addHandler(file_1_1)
logger1.addHandler(file_1_2)
# 写日志
logger1.critical(‘1111‘)
1 # 定义文件
2 file_2_1 = logging.FileHandler(‘l2_1.log‘, ‘a‘)
3 fmt = logging.Formatter()
4 file_2_1.setFormatter(fmt)
5
6 # 定义日志
7 logger2 = logging.Logger(‘s2‘, level=logging.INFO)
8 logger2.addHandler(file_2_1)
将错误信息完全写入日志中
1 import logging
2 import traceback
3
4 logging.basicConfig(filename="rizhi.txt",
5 format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘,
6 datefmt=‘%Y-%m-%d %H:%M:%S %p‘,
7 level=10)
8
9 def func():
10 try:
11 a = a +1
12 except Exception as e:
13 # 获取当前错误的堆栈信息
14 msg = traceback.format_exc()
15 logging.error(msg)
16 func()
文章标题:Python 约束 , 自定义异常 , 加密 , 日志
文章链接:http://soscw.com/index.php/essay/102689.html