zoukankan      html  css  js  c++  java
  • 小学生绞尽脑汁也学不会的python(异常,约束,MD5加密,日志处理)

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

    异常处理(处理)

      

    1.产生异常.raise 异常类(),抛出异常
    2. 处理异常:
                try:
                    xxxxx # 尝试执行的代码.
                except 异常类 as 变量: # 出现错误的时候. 捕获到异常
                    xxxxxx  # 处理异常ch
    
                try:
                    """操作"""
                except Exception as e:
                    """保护的父类,可以捕获所有异常"""
                else:
                    """保护不抛出异常的代码,当try中无异常的时候执行"""
                finally:
                    """最后总要执行我"""
    def chu(a,b):
        return a/b
    try:                       #尝试着运行
        ret = chu(10,0)
        print(ret)
    except Exception as e:     #Exception 表示所有的错误
        print("除数不能是0")
    
    try:
        print("各种操作...")
    except ZeroDivisiongError as e:
        print("除数不能是0")
    except FileNotFoundError as e:
        print("文件不存在")
    except Exception as e:
        print("其他错误")
    

      

    程序先执⾏操作, 然后如果出错了会走except中的代码. 如果不出错, 执⾏else中
    # 的代码. 不论处不出错. 最后都要执⾏finally中的语句. ⼀般我们⽤try...except就够⽤了. 顶多
    # 加上finally. finally⼀般⽤来作为收尾⼯作.
    3. 自定义异常
    继承Exception,那这个类就是一个异常类
    lass GenderError(Exception):
        pass
    class Person:
         def __init__(self,name,gender):
            self.name = name
            self.gender = gender
    
    def nan_zao_tang_xi_zao(person):
        if person.gender != "男":
            raise GenderError("性别不对,这里是澡堂子")
    
    p1 = Person("alex","男")
    p2 = Person("eggon","蛋")
    
    try:
        nan_zao_tang_xi_zao(p1)
        nan_zao_tang_xi_zao(p2)
    except GenderError as e:
        print(e)
    except Exceptiong as e:
        print("反正报错了")
    

      


    4. 堆栈信息
    import traceback
    traceback.format_exc() 获取堆栈信息.处理异常:
    mport traceback
    """继承Exceptiong.那个类就是一个异常类"""
    class GenderError(Exception):
        pass
    class Person:
        def __init__(self,name,gender):
            self.name = name
            self.gender = gender
    def nan_zao_tang_xi_zao(person):
        if person.gender != "男":
            raise GenderError("性别不对,这里是男澡堂子")
    p1 = Person("alex", "男")
    p2 = Person("eggon", "蛋")
    
    """处理异常"""
    try:
        nan_zao_tang_xi_zao(p1)
        nan_zao_tang_xi_zao(p2)
    except GenderError as e:
        val = traceback.format_exc()  #获取到堆栈信息
        print(e)
        print(val)
    except Exception as e:
        print("反正报错了")
    

      ************************************************************************************************************

     约束(难)
    约束是对子类进行的约束。
    一。 通过抛异常(简单)
    在父类中给出一个方法。 这个方法中什么都不写。 就抛异常。 NotImplementError()
    在子类中把上述的方法进行重写。
    重写:子类重新定义父类中的方法。
    lass Base:
        def login(self):
            raise Exception("你没有实现login方法()")
    class Normal(Base):
        def login(self):
            pass
    class Member(Base):
        def denglu(self):
            pass
    class Admin(Base):
        def login(self):
            Pass
    
    def login(obj):
        print("准备验证码...")
        obj.login()
        print("进入主页...")
    
    n = Normal()
    m = Member()
    a = Admin()
    login(n)
    login(m)
    login(a)
    

      

    二。 抽象类和抽象方法(java, c
    # )
    接口: 类中都是抽象方法.
    from abc import ABCMeta, abstractmethod

    抽象方法: 抽象方法不用给出方法体.写个pass就行了
    抽象类:
    语法:类(metaclass=ABCMeta)
    概念: 如果类中包含了抽象方法.这个类一定是抽象类
    特点: 抽象类一般不创建对象.
    抽象类中可以存在正常方法

    可以约束子类必须实现抽象方法
    from abc import ABCMeta,abstractmethod
    
    class IGame(metaclass=ABCMeta):
        @abcstractmenthod
        def piay(self):
            pass
        def turn_off(self):
            print("破几把游戏,")
    class DNFGame(IGname):
        def play(delf):
            print("dnf的玩法")
    
    dg = DNFGame()
    dg.play()
    

      *************************************************************************************************************************

             MD5加密
    MD5加密:不可逆
    引入模块
    hashlib
    1
    创建md5对象
    2.
    把加密信息交给md5对象
    3.
    获取密文
    mport hashl
    obj = hashlib.md5()
    obj.update("alex".encode("utf-8")) # 加密的必须是字节
    miwen = obj.hexdigest()
    print(miwen) # 534b44a19bf18d20b71ecc4eb77c572f
    
    import hashlib
    
    def my_md5(s):
        obj = hashlib.md5(b"fjlksajflkjasfsalwer123dfskjf")
        obj.update(s.encode("utf_8"))
        return minwen
    
    username = input("请输入用户名:")
    password = input("请输入密码:")
    
    if username == "wusir" and my_md5(password) =="99fca4b872fa901aac30c3e952ca786d"
        print("成功")
    else:
        print("失败")
    

      **********************************************************************************************************************************************************


    日志处理(重要, 简单)
    引入logging模块
    简单配置即可(basicConfig 单一日志文件 fileHandler 文件助手可以实现多文件操作)
    日志级别:
    CRITICAL 最高的
    ERRO 40
    WARN 30
    INFO 20
    DEBUG 10

    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)
    
    
    # 多文件日志处理
    # 创建⼀个操作⽇志的对象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系统')
    

      

  • 相关阅读:
    Core Data入门
    web前端开发与iOS终端开发的异同
    Blocks编程
    ARC下循环引用的问题
    小项目
    error: /Users/**/Documents/workspace/***/clean_right_normal.png: No such file or directory
    修复NSTextAlignmentCenter引起的警告
    Implicit conversion loses integer precision: 'long long' to 'NSUInteger' (aka 'unsigned int')
    手势相关函数
    implicit declaration of function setxattr is invalid in c99
  • 原文地址:https://www.cnblogs.com/konghui/p/9724937.html
Copyright © 2011-2022 走看看