zoukankan      html  css  js  c++  java
  • day33 Pyhton logging 模块和包

    一内容回顾

      try/except

      try/except/else

      try/finally

      try/except

      try/except/finally

      try/except/else/finally

    报错的时候

      1检查程序逻辑是不是有问题

      2.逻辑没有问题,但是就是会报错

        找到具体错误的那一行代码

        在这一行代码上加上try,再根据错误类型进行处理

    主动抛异常

      raise 异常类型

    自定义异常

      继承BaseException

      __str__方法的返回值就是这个异常抛出之后的异常内容

    断言 assert语法,不满足条件就报错

    hasblib模块

    摘要模块:各种各样的摘要算法

    md5/sha1

    两件事:

      1.密码的密文存储: 各种算法 动态加盐

      2.文件的一致性校验

    md5_obj =hashlib.md5(bytes 盐)# 创建一个新的md5值计算的对象

    md5_obj.update(bytes) #每一次uodate,相当于在原来的字符串后面加上新的字符串

    md5_obj.hexdigest() #只是获取最终结果

    二今日内容

    logging #日志模块

      给用户看 : 银行流水购物记录

      哪一个管理员什么时候登陆 删除了一个学生

    给程序员看的 :

       计算器 'asjkdghlghljgjl;;' 计算错误了

       录下每一个用户让你计算的表达式

       记录下每一个计算的步骤是怎么错的

    # f = open()
    # f.write('年月日时分秒 所在的文件 错误的级别 asjhkhkaghkldgh')
    # f.close()
    # 格式不好看 logging模块 这些格式你就不需要反复写
    # 每一次都需要自己打开文件关闭文件  logging就不需要了
    # 有一些信息 能够控制它在某一写特定的时刻就打印出来
    # logging模块不能自动帮助你生成日志,仍然是你自己写你想写的内容
    # logging只是帮助你 简化操作文件的步骤按照你的要求规划日志等级帮助你规范格式
    import logging
    # logging.basicConfig(level=logging.DEBUG)
    # logging.debug('debug message')    # 最细节的  计算机计算的那些小过程
    # logging.info('info message')      # 普通信息  记录每个用户的操作
    # logging.warning('warning message')# 警告信息  你觉得可能会影响到你程序的安全正确率的内容
    # logging.error('error message')    # 错误信息  直接影响你程序的健康了
    # logging.critical('critical message')#批判的 把整个userinfo文件删掉了
    # 默认显示warning以上的日志
    logging.basicConfig(level=logging.DEBUG,
                         format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                         datefmt='%a, %d %b %Y %H:%M:%S',
                         filename = 'test.log',
                         filemode = 'a'
    # 1.操作系统的编码可能会出现乱码问题 
    # 2.不支持同时向文件和屏幕输出
    import logging
    #logger对象的方式: 灵活性 可扩展性
    logger = logging.getLogger() #创建一个logger对象
    logger.setLevel(logging.DEBUG)
    #创建一个文件操作符 来准备操作日志向文件中写这件事
    fh = logging.FileHandler('mylog.log',encoding='utf-8')
    fh2 = logging.FileHandler('mylog2.log',encoding='utf-8')
    #创建一个屏幕操作符,来准备操作日志向屏幕中写这件事
    sh = logging.StreamHandler()
    #创建一个输出格式
    formatter = logging.Formatter('%(asctime)s%(filename)s[line:%(lineno)d]%(levelname)s %(message)s')
    formatter2 = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    #组合
    #输出格式和文件操作符屏幕操作符绑在一起
    fh.setFormatter(formatter)
    sh.setFormatter(formatter2)
    sh.setLevel(logging.ERROR)
    # logger对象分别和文件操作符屏幕操作符绑在一起
    logger.addHandler(fh)
    logger.addHandler(fh2)
    logger.addHandler(sh)

    #才开始能够使用logger来记录日志
    logger.debug('debug message')
    logger.info('info message')
    logger.warning('warning message')
    logger.error('error message')
    logger.critical('critical message')

    三.模块

    # mymodule就是模块
    # import mymodule mymodule就是一个变量了
    # 导入一个模块相当于什么???
        # 执行了这个模块对应的文件
        # 并且在执行的过程中 所有的函数名变量名类名都会绑定在这个模块中
    # 1.开辟了一块属于这个模块的空间
    # 2.让这个导入的名字mymodule指向这个空间
    # 3.执行模块中的代码,把所有的名字都存储在这个空间中
    # 模块会被重复导入么?不会
    # import mymodule as m
    # print(m.name)
    # m.read1()
    # as语句的用法
        # 1.名字很长的时候
        # 2.相同功能名字不同的几个模块的兼容问题
    # from mymodule import name,read2
    # from import 这个语法一旦执行,相当于什么?
        # from import 仍然相当于执行整个文件
    # 在from import 的过程中发生了什么事情?
        # 1.创建一个空间
        # 2.执行模块的代码 并且把每一个变量都放在空间中
        # 3.创建变量名 = import的名字,并且指向空间中对应的变量
    # 注意 :
        # 在写代码的过程中,不要取和导入的变量名相同的名字,否则会导致导入的名字不可用
        #模块中的变量永远是独立的,在内部是独立的使用的
     


     

  • 相关阅读:
    解决一起web 页面被劫持的案例
    django rest framwork教程之外键关系和超链接
    django restframwork 教程之authentication权限
    Puppet nginx+passenger模式配置
    Django restframwork教程之类视图(class-based views)
    使用emplace操作
    C++中的显示类型转换
    整数加法
    在不知道学生人数和每个学生课程数量的情况下对学生的平均成绩排序
    树的高度
  • 原文地址:https://www.cnblogs.com/pythonz/p/10043621.html
Copyright © 2011-2022 走看看