约束

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

Python中  语法:

 class BaseMessage(object):
def send(self):
""""
必须继承BaseMessage,然后其中必须编写send方法, 用于完成具体业务
"""
raise NotImplementedError(".send()必须被重新写")
# raise Exception (".send(), 必须被重新写") 这种不专业 , 没有研究过低层, 及Javaa class Email(BaseMessage):
def send(self,x1):
"""
必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
"""
pass obj = Email()
obj.send(1)

Python中约束的方式 :

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

总结 :

  • 什么是接口以及作用?

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

应用场景 :

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

自定义异常

解释:

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

例如 :

 # 自定义异常
import os class ExistsError(Exception):
pass class KeyInvalidError(Exception):
pass def func(path,prev):
"""
去path路径的文件中,找到前缀为prev的一行数据,获取数据并返回给调用者。
1000, 成功
1001, 文件不存在
1002, 关键字为空
1003, 未知错误
... :return:
"""
response = {"code":1000,"data":None}
try:
if not os.path.exists(path): # 判断路径是否存在
raise ExistsError()
if not prev:
raise KeyInvalidError() """
代码块
"""
except ExistsError as e:
response['code'] = 1001
response['data'] = '文件不存在'
except KeyInvalidError as e:
response['code'] = 1002
response['data'] = '关键字为空'
except Exception as e:
response['code'] = 1003
response['data'] = '未知异常'
return response
print(func("E:\Python",""))

自定义异常例子

加密

引用 import  hashlib  模块   可以将字符串加密成密文

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

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

 import hashlib

 heshun = b"hehsun123456"  # 自定义添加的特有的加密

 def md5(pwd):
# 初始化对象
obj = hashlib.md5(heshun)
# 写入加密字节
obj.update(pwd.encode("utf-8"))
# 获取密文
return obj.hexdigest()

用于密码加密

例如:

 import hashlib

 SALT = b'heshun123456'

 def md5(pwd):
# 实例化对象
obj = hashlib.md5(SALT)
# 写入要加密的字节
obj.update(pwd.encode('utf-8'))
# 获取密文
return obj.hexdigest() user = input("请输入用户名:")
pwd = input("请输入密码:")
if user == 'qq123456' and md5(pwd) == '94394d9d8f30ed2dd8259819c60b9c54':
print('登录成功')
else:
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('')

日志一

 # 定义文件
file_2_1 = logging.FileHandler('l2_1.log', 'a')
fmt = logging.Formatter()
file_2_1.setFormatter(fmt) # 定义日志
logger2 = logging.Logger('s2', level=logging.INFO)
logger2.addHandler(file_2_1)

日志二

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

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

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

引用   traceback   模块

 import logging
import traceback 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) def func():
try:
a = a +1
except Exception as e:
# 获取当前错误的堆栈信息
msg = traceback.format_exc()
logging.error(msg)
func()

如何获取异常的堆栈信息

import trance
try:
       …
except Exception as e:
         trance.format_exc()

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

  1. 小学生绞尽脑汁也学不会的python(异常,约束,MD5加密,日志处理)

    小学生绞尽脑汁也学不会的python(异常,约束,MD5加密,日志处理) 异常处理(处理) 1.产生异常.raise 异常类(),抛出异常2. 处理异常: try: xxxxx # 尝试执行的代码. ...

  2. python约束 异常 MD5 日志处理

    一.约束 1.用父类执行约束 子类继承父类,用重写方法,对子类的方法进行约束. class Foo: def login(self): # 对子类进行约束,该方法需要重写 # 没有执行的错误 rais ...

  3. 异常处理,约束,MD5加密日志处理

    程序运行过程中产生的错误, 不正常 def chufa(a, b): try: # 尝试执行xxx代码 ret = a/b # 如果这里出现了错误. 异常. 系统内部会产生一个异常对象. 系统会把这个 ...

  4. python 约束. 异常处理. MD5. 日志处理

    一.约束 1.抛异常 # # 项目经理写的 class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了NotImplementedError ...

  5. 巨蟒python全栈开发-第20天 核能来袭-约束 异常处理 MD5 日志处理

    一.今日主要内容 1.类的约束(对下面人的代码进行限制;项目经理的必备技能,要想走的长远) (1)写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError(重点) (2)抽象 ...

  6. python爬虫---js加密和混淆,scrapy框架的使用.

    python爬虫---js加密和混淆,scrapy框架的使用. 一丶js加密和js混淆 js加密 ​ 对js源码进行加密,从而保护js代码不被黑客窃取.(一般加密和解密的方法都在前端) http:// ...

  7. Python的RSA加密和PBE加密

    最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现. 在网上搜了一下,python的RSA加密这块写的还是比较多的,但是P ...

  8. python中的第三方日志模块logging

    基本上每个系统都有自己的日志系统,可以使自己写的,也可以是第三方的.下面来简单介绍一下python中第三方的日志模块,入手还是比较简单的,但是也很容易给自己埋雷. 下面是我参考的资料链接 入手demo ...

  9. 潭州课堂25班:Ph201805201 爬虫基础 第七课 Python与常见加密方式 (课堂笔记)

    打开图形界面  18版 Python与常见加密方式 前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时 ...

随机推荐

  1. react-quill 富文本编辑器

    适合react的一款轻量级富文本编辑器 1.http://blog.csdn.net/xiaoxiao23333/article/details/62055128 (推荐一款Markdown富文本编辑 ...

  2. QT Designer 的汉化

    Designer是很好用的设计器,通过 pip 安装PyQt5之后,一般都是英文的 所以给有需要的人带来汉化的包(这个是通过替换  translations 文件夹来实现的) translations ...

  3. [转载]java开发实现word在线编辑及流转

    OA公文流转系统主要用于处理企业日常工作中内外部的各种公文,包括了公文的拟稿.审批.传阅.公告.归档,多层上级可以对下级撰写的公文进行逐级审批或修改,待最高级人员确认无误后即可进行核稿和发文等操作,最 ...

  4. mvp和mvc的区别

    一句话总结:你代码逻辑有没有写在View中的,有就是MVC,没有就是MVP MVP模式: View不直接与Model交互,而是通过与Presenter交互来与Model间接交互 Presenter与V ...

  5. OC-SEL 和 Class

    [认识选择器]============================================ SEL 1.选择器(SEL)是一个变量类型. 2.选择器用来装成员消息(成员方法) people ...

  6. 【python】命令行解析工具argparse用法

    python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...

  7. SQL-left(right,inner) join

    left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) ...

  8. vim编辑器安装命令使用命令和设置的使用总结

    vim编辑器的安装 vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.本文讲解主要是在Cento ...

  9. Qt图形视图体系结构示例解析(视图、拖拽、动画)

    本博的示例来自与QT Example:C:\Qt\Qt5.9.3\Examples\Qt-5.9.3\widgets\graphicsview\dragdroprobot 将通过分析示例完成主要功能: ...

  10. 51nod 1085 背包问题

    在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. 收起   输入 第1行,2个 ...