zoukankan      html  css  js  c++  java
  • python开发模块基础:异常处理&hashlib&logging&configparser

    一,异常处理

     1 # 异常处理代码
     2 try:
     3     f = open('file', 'w')
     4 except ValueError:
     5     print('请输入一个数字')
     6 except Exception as e: #万能异常
     7     print(e,'异常啦')
     8 else:
     9     print('else 被执行')
    10 finally:
    11     f.close()
    12     print('finally')
    13 
    14 
    15 # 异常处理代码解释
    16 try:
    17     pass
    18 except ValueError:
    19     pass
    20 except Exception as e:
    21     print('统筹处理所有错误的措施')
    22 else:
    23     print("针对这段try中的代码没有异常要特别处理的")
    24 finally:
    25     print("不管有没有异常都要执行的代码")
    26 
    27 # 手动出发异常
    28 # raise KeyError
    29 # try:
    30 #     raise AttributeError('错啦错啦')
    31 # except AttributeError as e:
    32 #     print(e)
    33 
    34 # 断言
    35 # assert 1==1  #断言 一个会抛出异常的判断
    36 # if 1 == 2:
    37 #     print()
    38 # print(123)
    39 
    40 # if 和 try的区别
    41 #if
    42 #预防以及在你能想到的情况范围内做限制
    43 #try
    44 #当在这一块代码块这里可能出现的问题千奇百怪,去解决你想不到的具体的错误的时候
    45 
    46 
    47 #什么时候用到异常处理
    48 #什么时候用异常处理:你能想到有异常,并且可能出现在这一块代码的异常有很多种,不能一一枚举
    49 #禁止在大段代码外面套异常处理

    二,hashlib模块

     1 #摘要算法,不是一个解密算法
     2 #检测一个字符串是否发生了变化
     3 
     4 import hashlib
     5 # md5_obj = hashlib.md5('nezha'.encode('utf-8'))   #MD5值,这里就算加盐
     6 # md5_obj.update('123456'.encode('utf-8'))
     7 # print(md5_obj.hexdigest())
     8 # md5_obj.update('hello,egon~'.encode('utf-8'))
     9 # print(md5_obj.hexdigest())
    10 
    11 # 用途
    12 # 文件校验
    13     # 文件是否被改变
    14 # 登录密码
    15     #不能解密,但可以“撞库”
    16     #加盐 hashlib.md5('nezha'.encode('utf-8'))
    17 
    18 
    19 # 文件校验
    20 import hashlib
    21 # md5_obj = hashlib.md5()
    22 # import os
    23 # filesize = os.path.getsize('filename')
    24 # f = open('filename','rb')
    25 # while filesize>0:
    26 #     if filesize > 1024:
    27 #         content = f.read(1024)
    28 #         filesize -= 1024
    29 #     else:
    30 #         content = f.read(filesize)
    31 #         filesize -= filesize
    32 #     md5_obj.update(content)
    33 # # for line in f:
    34 # #     md5_obj.update(line.encode('utf-8'))
    35 # md5_obj.hexdigest()
    36 
    37 # sha_obj = hashlib.sha1()                          #更准确
    38 # sha_obj.update('123456'.encode('utf-8'))
    39 # print(sha_obj.hexdigest())

    三,configparser模块

      1 import configparser
      2 #该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)
      3 '''
      4 [DEFAULT]
      5 ServerAliveInterval = 45
      6 Compression = yes
      7 CompressionLevel = 9
      8 ForwardX11 = yes
      9   
     10 [bitbucket.org]
     11 User = hg
     12   
     13 [topsecret.server.com]
     14 Port = 50022
     15 ForwardX11 = no
     16 '''
     17 
     18 # 如果想用python生成一个这样的文档怎么做呢?
     19 '''
     20 import configparser
     21 
     22 config = configparser.ConfigParser()
     23 
     24 config["DEFAULT"] = {'ServerAliveInterval': '45',
     25                       'Compression': 'yes',
     26                      'CompressionLevel': '9',
     27                      'ForwardX11':'yes'
     28                      }
     29 
     30 config['bitbucket.org'] = {'User':'hg'}
     31 
     32 config['topsecret.server.com'] = {'Host Port':'50022','ForwardX11':'no'}
     33 
     34 with open('example.ini', 'w') as configfile:
     35 
     36 config.write(configfile)
     37 '''
     38 
     39 #查找文件
     40 '''
     41 import configparser
     42 
     43 config = configparser.ConfigParser()
     44 
     45 #---------------------------查找文件内容,基于字典的形式
     46 
     47 print(config.sections())        #  []
     48 
     49 config.read('example.ini')
     50 
     51 print(config.sections())        #   ['bitbucket.org', 'topsecret.server.com']
     52 
     53 print('bytebong.com' in config) # False
     54 print('bitbucket.org' in config) # True
     55 
     56 
     57 print(config['bitbucket.org']["user"])  # hg
     58 
     59 print(config['DEFAULT']['Compression']) #yes
     60 
     61 print(config['topsecret.server.com']['ForwardX11'])  #no
     62 
     63 
     64 print(config['bitbucket.org'])          #<Section: bitbucket.org>
     65 
     66 for key in config['bitbucket.org']:     # 注意,有default会默认default的键
     67     print(key)
     68 
     69 print(config.options('bitbucket.org'))  # 同for循环,找到'bitbucket.org'下所有键
     70 
     71 print(config.items('bitbucket.org'))    #找到'bitbucket.org'下所有键值对
     72 
     73 print(config.get('bitbucket.org','compression')) # yes       get方法Section下的key对应的value
     74 
     75 '''
     76 
     77 #增删改查
     78 '''
     79 import configparser
     80 
     81 config = configparser.ConfigParser()
     82 
     83 config.read('example.ini')
     84 
     85 config.add_section('yuan')
     86 
     87 
     88 
     89 config.remove_section('bitbucket.org')
     90 config.remove_option('topsecret.server.com',"forwardx11")
     91 
     92 
     93 config.set('topsecret.server.com','k1','11111')
     94 config.set('yuan','k2','22222')
     95 
     96 config.write(open('new2.ini', "w"))
     97 '''
     98 
     99 
    100 # ***
    101 # for key in config['bitbucket.org']:     # 注意,有default会默认default的键
    102 #     print(key,config['bitbucket.org'][key])

    四,logging模块

     1 '''
     2 默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,
     3 这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),
     4 默认的日志格式为日志级别:Logger名称:用户输出消息。
     5 
     6 import logging
     7 logging.debug('debug message')
     8 logging.info('info message')
     9 logging.warning('warning message')
    10 logging.error('error message')
    11 logging.critical('critical message')
    12 '''
    13 
    14 # 灵活配置日志级别,日志格式,输出位置:
    15 '''
    16 import logging  
    17 logging.basicConfig(level=logging.DEBUG,  
    18                     format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',  
    19                     datefmt='%a, %d %b %Y %H:%M:%S',  
    20                     filename='/tmp/test.log',  
    21                     filemode='w')  
    22   
    23 logging.debug('debug message')  
    24 logging.info('info message')  
    25 logging.warning('warning message')  
    26 logging.error('error message')  
    27 logging.critical('critical message')
    28 '''
    29 
    30 # 配置参数
    31 '''
    32 logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
    33 
    34 filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
    35 filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
    36 format:指定handler使用的日志显示格式。
    37 datefmt:指定日期时间格式。
    38 level:设置rootlogger(后边会讲解具体概念)的日志级别
    39 stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
    40 
    41 format参数中可能用到的格式化串:
    42 %(name)s Logger的名字
    43 %(levelno)s 数字形式的日志级别
    44 %(levelname)s 文本形式的日志级别
    45 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
    46 %(filename)s 调用日志输出函数的模块的文件名
    47 %(module)s 调用日志输出函数的模块名
    48 %(funcName)s 调用日志输出函数的函数名
    49 %(lineno)d 调用日志输出函数的语句所在的代码行
    50 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
    51 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
    52 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
    53 %(thread)d 线程ID。可能没有
    54 %(threadName)s 线程名。可能没有
    55 %(process)d 进程ID。可能没有
    56 %(message)s用户输出的消息
    57 
    58 '''
    59 
    60 # ***
    61 '''
    62 logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,
    63 Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别,当然,也可以通过
    64 fh.setLevel(logging.Debug)单对文件流设置某个级别。
    65 '''
    66 # logger对象配置
    67 '''
    68 import logging
    69 
    70 logger = logging.getLogger()
    71 # 创建一个handler,用于写入日志文件
    72 fh = logging.FileHandler('test.log')
    73 
    74 # 再创建一个handler,用于输出到控制台
    75 ch = logging.StreamHandler()
    76 
    77 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    78 
    79 fh.setFormatter(formatter)
    80 ch.setFormatter(formatter)
    81 
    82 logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
    83 logger.addHandler(ch)
    84 
    85 logger.debug('logger debug message')
    86 logger.info('logger info message')
    87 logger.warning('logger warning message')
    88 logger.error('logger error message')
    89 logger.critical('logger critical message')
    90 '''
  • 相关阅读:
    进程、线程和协程的区别(转)
    IO多路复用机制(转)
    防火墙及其功能(转)
    TCP连接的建立和终止。
    TCP和UDP细致刻画,区别。
    typename T和class T区别与联系
    TCP UDP的详解开始 ----UNIX网络编程
    关于UNIX网络编程的的OSI,1.7章的总结
    UNIX网络编程daytime服务端和客户端的实现过程
    linux shell脚本执行错误:bad substitution
  • 原文地址:https://www.cnblogs.com/jokerbj/p/7416478.html
Copyright © 2011-2022 走看看