zoukankan      html  css  js  c++  java
  • 异常处理,约束,MD5加密,日志处理

    #异常
    # 程序运行过程中产生的错误, 不正常
    def chufa(a, b):
       try: # 尝试执行xxx代码
           ret = a/b # 如果这里出现了错误. 异常. 系统内部会产生一个异常对象. 系统会把这个错误抛出. 抛给调用方
           return ret
       except ZeroDivisionError as e: # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
           print(e)
           print("出错了. 0不能是除数")
       except FileNotFoundError as e:  # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
           print(e)
           print("出错了. 0不能是除数")
       except StopIteration as e:  # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
           print(e)
           print("出错了. 0不能是除数")
       except Exception as e:  # 内部产生的所有异常都会被捕获, 捕获的异常对象会交给e
           print(e)
           print("出错了. 0不能是除数")
    
    ret = chufa(10, 0)
    print(ret)
    
    
    # 计算两个整数的加法
    def add(a, b):
        if type(a)!=int or type(b) != int:
            # return
            raise TypeError("我这里只要int, 不要别的类型")
        return a + b
    
    add(123, "abc")
    
    import traceback
    
    class GenderError(Exception):
        pass
    
    class Person:
        def __init__(self, name, gender):
            self.name = name
            self.gender = gender
    
    def nan_gu_ke_xi_zao(per):
        if per.gender != "":
            raise GenderError("这里是刘伟的男澡堂子. ")
        else:
            pass
    p1 = Person("alex", "不详")
    # nan_gu_ke_xi_zao(p1)
    p2 = Person("wusir", "不详")
    try:
        nan_gu_ke_xi_zao(p2)
    except GenderError as g:
        print(g)
        val = traceback.format_exc() # 获取错误堆栈
        print(val)
    #约束
    #1.抛异常约束
    class Base:
        def login(self):
            raise NotImplementedError("没有实现login方法") # 专业的写法
        def kantie(self):
            raise NotImplementedError("没有实现看帖功能")
    # 张三
    class Normal(Base):
        def login(self):
            print("普通人登陆")
    
    # 李四
    class Member(Base):
        def denglu(self):
            print("吧务登陆")
    
    # 王五
    class Admin(Base):
        def login(self):
            print("管理员登陆")
    
    def login(obj):
        print("产生验证码")
        obj.login() # 标准在这里.  必须由login
        print("进入主页")
    
    # 场景
    n = Normal()
    m = Member()
    a = Admin()
    login(n)
    login(m)
    login(a)
    
    # 重写:子类对父类提供的方法不满意。 重新去定义这个方法
    
    
    #2.抽象类和抽象方法约束
    from abc import ABCMeta, abstractmethod
    
    class Animal(metaclass=ABCMeta): # 在父类中写出metaclass= xxx  抽象类, 类中存在抽象方法, 类一定是抽象类
    
        @abstractmethod # 抽象方法
        def chi(self): # 抽象的概念.
            pass
        def haha(self):
            print("娃哈哈")
    
    
    class Cat(Animal): # 子类必须实现父类中的抽象方法.
        def chi(self):  # 具体的实现
            print("猫爱吃鱼")
    
    Cat()
    
    
    
    
    from abc import ABCMeta,abstractmethod
    
    class Base(metaclass=ABCMeta):
        @abstractmethod
        def login(self):pass
    
    # 张三
    class Normal(Base):
        def login(self):
            print("普通人登陆")
    
    # 李四
    class Member(Base):
        def login(self):
            print("吧务登陆")
    
    # 王五
    class Admin(Base):
        def login(self):
            print("管理员登陆")
    
    def login(obj):
        print("产生验证码")
        obj.login() # 标准在这里.  必须由login
        print("进入主页")
    
    # 场景
    n = Normal()
    m = Member()
    a = Admin()
    login(n)
    login(m)
    login(a)
    #md5加密
    import hashlib
    
    # 1. 创建一个MD5对象
    obj = hashlib.md5(b"flkjsdalkfjklasdjfklasjkflasdjklfasdjflkadsj") # 加盐
    
    # 2. 把要加密的内容给md5
    obj.update("alex".encode("utf-8")) # 必须是字节
    
    # 3. 获取密文
    val = obj.hexdigest()   # 534b44a19bf18d20b71ecc4eb77c572f aa7aa5ec13222b27f76a094207c5ac75
    print(val)
    
    def my_md5(val):
        obj = hashlib.md5(b"flkjsdalkfjklasdjfklasjkflasdjklfasdjflkadsj")
        obj.update(val.encode("utf-8"))
        val = obj.hexdigest()
        return val
    
    # 注册的时候. 用md5进行加密. 存储的是加密后的密文
    username = input("请输入用户名")
    password = input("请输入密码")
    # cun = my_md5(password)
    # print(cun) # alex 26adff81aa6778d26999b95ddc0e50b2
    if username == "alex" and my_md5(password) == "26adff81aa6778d26999b95ddc0e50b2":
        print("登录成功")
    else:
        print("登录失败")
    #日志处理
    #1.单文件日志设置
    import logging
    
    logging.basicConfig(filename='app.log',
                        format='%(asctime)s - %(name)s - %(levelname)s - %(module)s: %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S',
                        level=40)    # level 设置级别. 当你的信息的级别>=level的时候才会写入日志文件, 默认30
    
    # CRITICAL = 50
    # FATAL = CRITICAL
    # ERROR = 40
    # WARNING = 30
    # WARN = WARNING
    # INFO = 20
    # DEBUG = 10
    # NOTSET = 0
    # 写日志
    # logging.critical("我是critical")
    # logging.error("我是error")
    # logging.warning("我是警告")
    # logging.info("我是基本信息")
    # logging.debug("我是调试")
    # logging.log(2, "我是自定义")
    import traceback
    
    for i in range(20):
        try:
            if i % 3 == 0:
                raise FileNotFoundError("我是FileNotFountException")
            elif i % 3 == 1:
                raise StopIteration()
            elif i % 3 == 2:
                raise KeyError()
    
        except FileNotFoundError as e:
            val = traceback.format_exc()
            logging.error(val)
        except StopIteration as e:
            val = traceback.format_exc()
            logging.error(val)
        except KeyError as e:
            val = traceback.format_exc()
            logging.error(val)
        except Exception as e:
            val = traceback.format_exc()
            logging.error(val)
    
    
    # 2.多文件日志处理
    # 创建⼀个操作⽇志的对象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('A', level=40)
    logger1.addHandler(file_handler)
    # 记录日志
    logger1.error('我是A系统')
    
    
    
    # 再创建⼀个操作⽇志的对象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('B', level=40)
    logger2.addHandler(file_handler2)
    # 记录日志
    logger2.error('我是B系统')
  • 相关阅读:
    magento模板中XML与phtml关系 [四]
    magento 好好玩
    凹凸曼的修改zencart 程序(经典!)
    首页商品图片显示错位,easy-popular批量上传
    1.7-BGP①
    1.6-路由的控制③
    1.6-路由的控制②
    1.6-路由的控制①
    1.5
    1.4-动态路由协议OSPF⑧
  • 原文地址:https://www.cnblogs.com/PythonMrChu/p/9727186.html
Copyright © 2011-2022 走看看