python约束 异常 MD5 日志处理

一.约束

1.用父类执行约束

  子类继承父类,用重写方法,对子类的方法进行约束.

class Foo:
    def login(self):    # 对子类进行约束,该方法需要重写
        #     没有执行的错误
        raise NotImplementedError ("login重写")  # 抛出 NotImplementedError错误

class Member(Foo):
    def login(self):
        print("我是普通登陆")

class BaWu(Foo):
    def login(self):
        print("我是吧务登陆")

class HouTai(Foo):
    def denglu(self):
        print("我是后台登陆")

def fn(obj):
    obj.login()

m = Member()
bw = BaWu()
ht = HouTai()

fn(m)
fn(bw)
fn(ht)

2.定义抽象类进行约束

  抽象类中的抽象方法不能执行,报错约束

from abc import ABCMeta ,abstractmethod  #导入抽象类模块

class Foo(metaclass=ABCMeta):  # 定义一个抽象类 元类  

    @abstractmethod                 # 定义一个 抽象方法
    def login(self):pass

    def back(self):             # 抽象类中可以写正常方法
        print("退出登陆")

class Member(Foo):
    def login(self):
        print("我是普通登陆")

class BaWu(Foo):
    def login(self):
        print("我是吧务登陆")

class HouTai(Foo):
    def denglu(self):
        print("我是后台登陆")

def fn(obj):
    obj.login()

m = Member()
bw = BaWu()
ht = HouTai()

fn(m)
fn(bw)
fn(ht)

m.back()

抽象类总结:

  1.子类必须重写父类的方法,否则子类也是抽象类

  2.抽象类不能创建对象

  3.有抽象方法的类,就是抽象类

  4.抽象类可以有方法

二.异常处理

1.处理异常错误

  格式     try...except...

try:                 # 处理异常 try ... except...
    print(1/0)
except ZeroDivisionError:    print("0不能做除数")   print("hah")
try:
    print(1/0)
except Exception:           # 可以处理所有错误,一般在最下面兜底用
    print("我能拦截下面吗")
except ZeroDivisionError:
    print("0不能做除数")

  格式      try...except...except...else...finally

try:
    # print(1/0)
    f = open("dssadas",mode="r")
except ZeroDivisionError:
    print("0不能做除数")
except FileNotFoundError:
    print("找不到文件")
except Exception:           # 可以处理所有错误,一般在最下面兜底用
    print("我能兜底")
else:     # 当try中的代码不产生任何错误的时候,会自动执行else里的代码
    print("没有出错?")   # 这里一般放pass
finally: # 最终,不管出错还是不出错,都要执行最后的finally
    print("哈哈哈")

2.自定义异常

  因为所有的异常类都继承Exception 所以写一个继承Exception的异常类就行

  使用 raise 抛出异常

class CulException(Exception):
    pass

# 怎么手动抛出自己的异常

def cul(a,b):
    if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
        return a + b
    else:
        # raise 抛出  raise 异常类(错误信息)
        raise CulException("这是自己定义的异常类,抛出")

print(cul("sdf",25))

3.查看堆栈

  可以查看到具体某一行出错

import traceback
class GenderException(Exception):
    pass

class Person:

    def __init__(self,name,gender):
        self.name = name
        self.gender = gender

    def xizao(self):
        print(f"{self.name}在洗澡")

def man_zaotang(t):
    if t.gender == "男":
        t.xizao()
    else:
        raise GenderException("进错了")    # 抛出异常很重要

try:
    p = Person("小明","女")
    man_zaotang(p)
except GenderException:
    ret = traceback.format_exc()   # 查看堆栈信息,看错误信息的
    print(ret)  

三.MD5加密

  导入模块使用,不可逆的一种加密方式

import hashlib
def my_md5(s):
    obj = hashlib.md5(b"dasds")    # 加盐  防止被破解
    obj.update(s.encode("utf-8"))    # 给s字符串加密
    return obj.hexdigest()          # 获取密文

uname = input("用户名:")
upwd = input("密码:")

if uname == "admin" and my_md5(upwd) == "f5cb18dbc8aae8b87c9129ff3156e0d5":
    print("登陆成功")

else:
    print("帐号或者密码错误")

四.日志处理

  日志一般不需要更改很多,只需要设置参数,有模板

1.单一日志模板

import logging
 # 单一项目模块
logging.basicConfig(
    filename="1.log",  # 把日志信息写入的文件名
    #          时间                    等级名               模块名       写入信息
    format="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S", #
    level=40  # 设置等级 超过这个的都写入日志
)
# 向日志文件写入内容
logging.critical("我几乎是最高等级50")
logging.error("我是错误,等级40")
logging.warning("我是警告,等级30")
logging.info("我是提示,等级20")
logging.debug("我是debug,等级10")
logging.log(600,"写入内容")

2.多个日志模板

import logging

file_handler = logging.FileHandler("2.log","a","utf-8")  # 创建日志文件
file_handler.setFormatter(
    logging.Formatter(
        # 日志格式
        fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s"))

logger1 = logging.Logger("dnf",level=10)  # 设置日志处理对象和等级
logger1.addHandler(file_handler)    # 把文件添加到日志

logger1.error("看看错误")    # 错误信息

file_handler2 = logging.FileHandler("3.log","a","utf-8")
file_handler2.setFormatter(
    logging.Formatter(
        fmt="%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s"
    )
)

logger2 = logging.Logger("lol",level=logging.DEBUG)
logger2.addHandler(file_handler2)

logger2.critical("????")     # 哪里需要记录日志就放到哪里,要设置等级

原文地址:https://www.cnblogs.com/q767498226/p/10158644.html

时间: 2024-10-09 04:43:20

python约束 异常 MD5 日志处理的相关文章

python之路--类的约束, 异常处理, MD5, 日志处理

1. 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代码之后. 发现了notImplementedError 继承他 直接重写他 def login(self): # 没有被实现错误 raise NotImplementedError("你要重写一下login这个方法. 否则报错!") # 抛异常 . class Member(Base): d

python 面向对象(五)约束 异常处理 MD5 日志处理

###############################总结###################### 1.异常处理 raise:抛出异常 try: 可能出现错误代码 execpt 异常类 as e: 异常处理 execpt 异常类 as e: 异常处理 else: 如果上面的代码没有报错,执行这里 finally: 收尾 自定义异常: 随便写个类. 继承Exception 2. 约束 父类和子类. 在父类中声明方法. 要求子类必须重写它 1. 抛出异常. raise NotImplem

python之路---20 约束 异常处理 MD5 日志

三十九, 一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继续运行 所有异常的根是Exception 1.基本语法 2.自定义异常    (继承Exception异常的根) 自定义异常  加 异常处理 3.堆栈信息(显示错误信息的具体位置) 需引入模块 三.MD5加密   不可逆 固定格式: 应用: 四.日志 1. 2.?个?项?, 有两个?系统,

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

约束 约束 , 约束其派生类:  保证派生类中必须编写send方法 , 不然执行可能就会报错 Python中  语法: 1 class BaseMessage(object): 2 def send(self): 3 """" 4 必须继承BaseMessage,然后其中必须编写send方法, 用于完成具体业务 5 """ 6 raise NotImplementedError(".send()必须被重新写") 7

20 约束 异常处理 MD5 日志

三十九, 一.类的约束 1.抛出异常    NotImplementedError 2.抽象方法 含有抽象方法的类是抽象类 抽象类中的方法全是抽象方法的是接口 抽象类不能创建对象 二.异常处理 处理完后代码可继续运行 所有异常的根是Exception 1.基本语法 2.自定义异常    (继承Exception异常的根) 自定义异常  加 异常处理 3.堆栈信息(显示错误信息的具体位置) 需引入模块 三.MD5加密   不可逆 固定格式: 应用: 四.日志 1. 2.?个?项?, 有两个?系统,

python--类的约束, 异常处理, MD5, 日志处理

一 . 类的约束 1. 写一个父类,父类中的某个方法要抛出一个异常 NotImplementedError class Base: # 对子类进行了约束. 必须重写该方法 # 以后上班了. 拿到公司代码之后. 发现了notImplementedError 继承他 直接重写他 def login(self): # 没有被实现错误 raise NotImplementedError("你要重写一下login这个方法. 否则报错!") # 抛异常 . class Member(Base):

零碎知识点:装饰器、MD5、异常、日志

装饰器 首先说一下装饰器 import time def timer(func): def inner(): start = time.time() func() print(time.time() - start) return inner @timer #==> func1 = timer(func1) def func1(): print('in func1') func1() 装饰器 上边一段代码就是简单的装饰器,,装饰器的作用是在不改变原函数的内容以及调用方式返回值的情况下,给函数添加

(转)python自动化测试之异常及日志

为了保持自动化测试用例的健壮性,异常的捕获及处理,日志的记录对掌握自动化测试执行情况尤为重要,这里便详细的介绍下在自动化测试中使用到的异常及日志,并介绍其详细的用法. 一.日志 打印日志是很多程序的重要需求,良好的日志输出可以帮我们更方便的检测程序运行状态.Python标准库提供了logging模块,切记Logger从来不直接实例化,其好处不言而喻,接下来慢慢讲解Logging模块提供了两种记录日志的方式. 1.logging之模块级别的函数方式记录日志: import logging #设置日

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