Python 约束 , 自定义异常 , 加密 , 日志

约束

约束 , 约束其派生类:  保证派生类中必须编写send方法 , 不然执行可能就会报错

Python中  语法:

 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中约束的方式 :

有主动抛异常 (如上)    还有   抽象类和抽象方法:

总结 :

  • 什么是接口以及作用?

    •   接口是一种数据类型,主要用于约束派生类中必须实现指定的方法
    •   Python中不存在, Java和C#中存在
  • Python中使用过什么来约束?
    •   抽象类 + 抽象方法  ,  编写上麻烦, 不常用
    •  人为主动抛异常
  • 约束时 ,  抛异常是否可以用其他的?
    •   专业 : raise  NotImplementedError(".send()  必须被重写")
    • 不专业: raise  Exception(".send()  必须被重写")

应用场景 :

  多个类 , 内部都必须有某些方法时 , 需要使用基类 + 异常进行约束

自定义异常

解释:

  上面定义已知异常类 ,   继承  Exception   类 , 下面接收该设置的已知异常类, 并可以设置返回结果 , 最后写一个接收未知异常  (Exception)  

例如 :

 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  模块   可以将字符串加密成密文

用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

一般用加密密码  防止数据库被盗 ,密码泄露   此加密无法解密

 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

注  :  只有[当前写等级] 大于等于[日志等级] 时 ,日志文件才被记录

日志记录格式:

多文件处理日志

对于上述记录日志的功能,只能将日志记录在单文件中,如果想要设置多个日志文件, logging.basicConfig 将无法完成, 需要自定义和日志操作对象.

# 定义文件
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)

日志二

如上述创建的两个日志对象

  • 当使用[logger1] 写日志时,会将相应的内容写入 l1_1.log 和 l1_2.log 文件中
  • 当使用【logger2】写日志时,会将相应的内容写入 l2_1.log 文件中

将错误信息完全写入日志中

引用   traceback   模块

 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()

原文地址:https://www.cnblogs.com/heshun/p/9567850.html

时间: 2024-08-30 01:46:36

Python 约束 , 自定义异常 , 加密 , 日志的相关文章

python约束 异常 MD5 日志处理

一.约束 1.用父类执行约束 子类继承父类,用重写方法,对子类的方法进行约束. class Foo: def login(self): # 对子类进行约束,该方法需要重写 # 没有执行的错误 raise NotImplementedError ("login重写") # 抛出 NotImplementedError错误 class Member(Foo): def login(self): print("我是普通登陆") class BaWu(Foo): def l

python分析apahce网站日志的例子

有关python实现apahce网站日志分析的方法. 应用到:shell与python数据交互.数据抓取,编码转换 #coding:utf-8 #!/usr/bin/python'''程序说明:apache access.log日志分析 分析访问网站IP 来源情况 日期:2014-01-06 17:01 author:gyh9711 程序说明:应用到:shell与python数据交互.数据抓取,编码转换'''import osimport jsonimport httplibimport cod

Python的RSA加密和PBE加密

最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现. 在网上搜了一下,python的RSA加密这块写的还是比较多的,但是PBE较少.所以我就讲讲我在RSA加密上面遇到的坑,大家权当一乐.PBE加密里面的盐.密钥. RSA 什么是RSA加密呢? 其实RSA是一种非对称加密,那什么是非对称加密呢?非对称加密又叫做公开密钥加密,就是说我有一对密钥,分为公钥和私钥.私钥我悄悄的留着,不给别人看.然后把公钥给别人(无论是谁).当

Python异或加密字符串

import os import sys import struct def enc(path, key): path_ret = "" for i in range(0, len(path)/4): path_ret += struct.pack("<L", struct.unpack("<L", path[i*4 : (i*4)+4])[0] ^ key) return path_ret print enc("danie

Python中将打印输出导向日志文件

Python中将打印输出导向日志文件 a. 利用sys.stdout将print行导向到你定义的日志文件中,例如: import sys # make a copy of original stdout route stdout_backup = sys.stdout # define the log file that receives your log info log_file = open("message.log", "w") # redirect pri

python清除数据库错误日志

# coding=gbk from encodings import gbk import re import sys import  os import  pyodbc import traceback import decimal #连接数据库 conn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.1.43;DATABASE=master;UID=sa;PWD=passwd123!') # 获取cursor对象来进行操作 curs

python连接zookeeper的日志问题

用python连接zookeeper时,在终端里,一直会有zookeeper的日志冒出来,这样会很烦. 2014-07-22 10:06:19,544:10474(0x7fd459406700):[email protected][email protected]1557: Exceeded deadline by 11ms 解决方法是在连接后设置一下zookeeper的日志等级为ERROR,这样WARN的日志就不会弹出来了 import zookeeper zookeeper.set_debu

今晚九点|如何使用 Python 分析 web 访问日志?

主题:如何使用 Python 分析 Web 访问日志 内容 Python 基础 字符串.字典.文件.时间 Web 访问日志 实战 提问 主讲师:KK 多语言混搭工程师,热爱开源技术,喜欢GET新技能,5年 PHP.Python 项目开发经验,带领团队完成多个中.小型项目开发,对安全.云等多个领域富有浓厚兴趣,擅长于 WEB 安全开发.性能优化.分布式应用开发&设计等多方面,做事认真负责,乐于分享技能,现任 51Reboot.com Python 实战班讲师 任何语言都有使用场景,只有合适和不合适

Python与常见加密方式

前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错. 将字符串和Bytes互相转换可以使用encode()和decode()方法.如下所示: # 方法中不传参数则是以默认的utf-8编码进行转换 In [1]: '南北'.encode() Out[1]: b'\xe5\x8d\x97\xe5\x8c\x97' ? In [2]: b'\xe5\x8d\x