博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
约束、自定义异常、加密、日志处理
阅读量:7061 次
发布时间:2019-06-28

本文共 3036 字,大约阅读时间需要 10 分钟。

一、约束

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

class BaseMessage(object):    def send(self,x1):        """        必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。        """        raise NotImplementedError(".send() 必须被重写.")class Email(BaseMessage):    def send(self,x1):        """        必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。        """        passobj = Email()obj.send(1)

  1.什么是接口以及作用:

    接口是一种数据类型,主要用于约束派生类中必须实现的指定方法

    python中不存在接口,java、C#中存在

  2.python中使用什么来约束:

    抽象类+抽象方法(编写上麻烦,不推荐使用)

from abc import ABCMeta,abstractmethodclass Base(metaclass=ABCMeta): # 抽象类    def f1(self):        print(123)    @abstractmethod    def f2(self):   # 抽象方法        passclass Foo(Base):    def f2(self):        print(666)obj = Foo()obj.f1()

    人为主动抛出异常

  3.约束时,抛出的异常是否可以使用其他:

不专业:raise Exception(".send() 必须被重写.")专业:raise NotImplementedError(".send() 必须被重写.")

二、自定义异常

class MyException(Exception):    #必须继承Exception    def __init__(self, code, msg):        self.code = code        self.msg = msgtry:    # 知识点:主动抛出异常     raise MyException(1000, '操作异常')except KeyError as obj:    print(obj, 1111)except MyException as obj:  # 知识点:捕获异常     print(obj, 2222)except Exception as obj:    print(obj, 3333)

三、加密(hashlib模块)

  关键字:撞库、加盐

import hashlibSALT = b'2erer3asdfwerxdf34sdfsdfs90'def md5(pwd):    # 实例化对象    obj = hashlib.md5(SALT)    # 写入要加密的字节    obj.update(pwd.encode('utf-8'))    # 获取密文    return obj.hexdigest() # 21232f297a57a5a743894a0e4a801fc3 # 66fbdc0f98f68d69cd458b0cee975fe3 # c5395258d82599e5f1bec3be1e4dea4auser = input("请输入用户名:")pwd = input("请输入密码:")if user == 'oldboy' and md5(pwd) == 'c5395258d82599e5f1bec3be1e4dea4a':    print('登录成功')else:    print('登录失败')
View Code

四、日志

  日志主要是给开发人员看的,用于排查错误

import logginglogger = logging.basicConfig(filename="zhangqing",                             format="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s",                             datefmt="%Y-%m-%d %H:%M:%S",                             level=30)logging.debug('x1') # 10logging.info('x2')  # 20logging.warning('x3') # 30logging.error('x4')    # 40logging.critical('x5') # 50logging.log(10,'x6')import tracebackdef func():    try:        a = a +1    except Exception as e:        # 获取当前错误的堆栈信息        msg = traceback.format_exc()        logging.error(msg)func()
View Code

  自定义日志

import logging# 创建一个操作日志的对象logger(依赖FileHandler)file_handler = logging.FileHandler('l1.log', 'a', encoding='utf-8')file_handler.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s"))logger1 = logging.Logger('s1', level=logging.ERROR)logger1.addHandler(file_handler)logger1.error('123123123')# 在创建一个操作日志的对象logger(依赖FileHandler)file_handler2 = logging.FileHandler('l2.log', 'a', encoding='utf-8')file_handler2.setFormatter(logging.Formatter(fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s"))logger2 = logging.Logger('s2', level=logging.ERROR)logger2.addHandler(file_handler2)logger2.error('666')
View Code

 

转载于:https://www.cnblogs.com/qq849784670/p/9567526.html

你可能感兴趣的文章
SQL SERVER中行列转换
查看>>
nginx中配置pathinfo模式示例
查看>>
Vscode 开发插件
查看>>
python
查看>>
CentOS中与网络相关的常用
查看>>
html5的Message信息提示框
查看>>
Android清除本地数据缓存代码
查看>>
玩转Vim 编辑器
查看>>
vue中的computed(计算属性)和watch(监听属性)的特点,以及深度监听
查看>>
cef_binary_3.2623.1401.gb90a3be
查看>>
log4j
查看>>
原生JS获取元素的位置与尺寸
查看>>
SOA_环境安装系列1_Oracle SOA Suite11g安装总括(案例)
查看>>
DBMS_JOBS
查看>>
Python基础3:函数
查看>>
devgridContral
查看>>
[转]notepad++正则表达式替换字符串详解
查看>>
最近踩坑汇总
查看>>
骨牌(/棋子?)覆盖问题
查看>>
浅谈差分
查看>>