Python-日志与异常

一、自定义异常

(通过自定义来编辑报错提示信息,代码报错以后会在输出框打印出来)
例:
[python]  view plain  copy
  1.    
  2. class sexExcption(Exception):  
  3.     ''''' 
  4.     自定义性别异常类 
  5.     '''  
  6.     pass  
  7. try:  
  8.     sex=input('请输入性别:')  
  9.     if sex!='男' and sex!='女':  
  10.         raise sexExcption('性别只能是男或女')#定义报错提示  
  11. except sexExcption as ex:  
  12.     print(ex)  
  13. finally:  
  14.     print('程序结束')  
执行命令得:
[python]  view plain  copy
  1.    
  2. 请输入性别:哈哈  
  3. 性别只能是男或女  
  4. 程序结束  

二、日志

概念:

日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。

作用:

  • 程序调试
  • 了解软件程序运行情况,是否正常
  • 软件程序运行故障分析与问题定位
logging模块

日志等级

日志等级(level)
描述
DEBUG
最详细的日志信息,典型应用场景是 问题诊断
INFO
信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
WARNING
当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
ERROR
由于一个更严重的问题导致某些功能不能正常运行时记录的信息
CRITICAL
当发生严重错误,导致应用程序不能继续运行时记录的信息
说明:

  • 上面列表中的日志等级是从上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次减少的;
  • 当为某个应用程序指定一个日志级别后,应用程序会记录所有日志级别大于或等于指定日志级别的日志信息,而不是仅仅记录指定级别的日志信息,nginx、php等应用程序以及这里要提高的python的logging模块都是这样的。同样,logging模块也可以指定日志记录器的日志级别,只有级别大于或等于该指定日志级别的日志记录才会被输出,小于该等级的日志记录将会被丢弃

 logging模块的使用方式介绍

基本函数使用

函数说明
logging.debug(msg, *args, **kwargs)
创建一条严重级别为DEBUG的日志记录
logging.info(msg, *args, **kwargs)
创建一条严重级别为INFO的日志记录
logging.warning(msg, *args, **kwargs)
创建一条严重级别为WARNING的日志记录
logging.error(msg, *args, **kwargs)

创建一条严重级别为ERROR的日志记录
logging.critical(msg, *args, **kwargs)
创建一条严重级别为CRITICAL的日志记录
logging.log(level, *args, **kwargs)
创建一条严重级别为level的日志记录
logging.basicConfig(**kwargs)
对root logger进行一次性配置
logging模块的四大组件

组件说明
loggers
提供应用程序代码直接使用的接口
handlers
用于将日志记录发送到指定的目的位置
filters
提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)
formatters
用于控制日志信息的最终输出格式
代码运用:
[python]  view plain  copy
  1.    
  2. import logging  
  3. log_format='%(asctime)s - %(levelname)s - %(message)s'  
  4. DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"#时间颠倒写法 不需要则可以去掉  
  5. logging.basicConfig(filename='my.log',level=logging.DEBUG, format=log_format,datefmt=DATE_FORMAT)  
  6. logging.debug('this is a debug')  
  7. logging.info("This is a info log.")  
  8. logging.warning("This is a warning log.")  
  9. logging.error("This is a error log.")  
  10. logging.critical("This is a critical log.")  
执行命令后:会创建一个名字为my.log得文件来记录错误

三、随机数

random.choice(range(1,34))随机取1-33之间的1个随机数,可能重复
random.choices(range(1,34),k=6,weights=range(1,34))方法,可以产生6个,但有可能重复,可看源码
常用:shus=random.sample(range(1,34),6)随机取6个,不重复,得到一个列表,但是没有排序

例:
[python]  view plain  copy
  1.    
  2. import random#使用随机数时必须先导入随机数模块  
  3. print(random.choice(range(1,10)))#1-10随即一个数字  
  4. print(random.choices(range(1,30),k=6,weights=range(1,30)))#1-30随机6个数字 k代表选取个数weights代表权重值  
  5. print(random.sample(range(1,30),6))#随机6个不重复的数字  
执行命令得:
[python]  view plain  copy
  1.    
  2. 3  
  3. [91813272919]  
  4. [16119498]  

四、模块 

代码格式
import sys(必须先引入)
print(sys.path)路径。打印后是一个列表,可以向其中追加路径
reload()重新加载路径
模块互相调用不可以,会产生死锁

五、推导

推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点。推导式包括:
1.列表推导式
2.字典推导式
3.集合推导式
<1>1.列表推导式
例:
[python]  view plain  copy
  1.    
  2. numbers = []  
  3. for x in range(1,100):  
  4.     if x % 3 == 0:  
  5.         numbers.append(x)  
  6. print(numbers)  
  7. nums=[x for x in range(1,100if x%3==0]  
  8. print(nums)  
执行命令得:
[python]  view plain  copy
  1.    
  2. [369121518212427303336394245485154576063666972757881848790939699]  
  3. [369121518212427303336394245485154576063666972757881848790939699]  
    2.注意:使用()生成generator将列表推导式得[]改成()即可得到生成器--yeild 没有元组推导
例:

[python]  view plain  copy
  1.    
  2. nums1=(x for x in range(1,100if x%3==0)  
  3. print(type(nums1))  

执行命令得:

[python]  view plain  copy
  1.    
  2. <class 'generator'>  

<2>字典推导式

字典推导和列表推导的使用方法是类似的,只不过中括号该改成大括号
例:
快速更换key和value
代码:

[python]  view plain  copy
  1.    
  2. dict={'a':10,'b':14}  
  3. new_dict={v:k for k,v in dict.items()}  
  4. print(new_dict)  
执行命令得:
[python]  view plain  copy
  1.    
  2. {10'a'14'b'}  
<3>集合推导式
列表推导式也是类似的。 唯一的区别在于它使用大括号{},Python会自动识别字典和集合
例:
打印2 3 5的平方  打印0到9的3次方
代码:
[python]  view plain  copy
  1.    
  2. set={x**2 for x in (2,3,5)}  
  3. print(set)  
  4. set={x**3 for x in range(0,10)}  
  5. print(set)  
执行命令得:
[python]  view plain  copy
  1.    
  2. {9425}  
  3. {0164512834321672927125}  

练习

1.求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元组列表
[python]  view plain  copy
  1.    
  2. list1=[]  
  3. for x in range(5):  
  4.     if x%2==0:  
  5.         for y in range(5):  
  6.             if y%2==1:  
  7.                 list1.append((x,y))  
  8. print(list1)#通过for遍历得  
  9. list=[(x,y) for x in range(5)  if x%2==0 for y in range(5)  if y%2==1]  
  10. print(list)#通过推导得  
执行命令得:
[python]  view plain  copy
  1.    
  2. [(01), (03), (21), (23), (41), (43)]  
  3. [(01), (03), (21), (23), (41), (43)]  
2.求m中由1 4 7 \1 5 9\3 5 7组成的列表
[python]  view plain  copy
  1.    
  2. m=[[1,2,3],[4,5,6],[7,8,9]]  
  3. list2=[x[0for x in m]  
  4. print(list2)  
  5. print([m[x][x] for x in range(len(m))])  
  6. print([m[x][len(m)-1-x] for x in range(len(m))])  
执行命令得
[python]  view plain  copy
  1.    
  2. [147]  
  3. [159]  
  4. [357]  
3.将单词长度大于3的转为大写输出
[python]  view plain  copy
  1.    
  2. names = ['bei','qi','niao','jerry','wendy','smith']  
  3. print([name.upper() for name in names if len(name)>3])  
执行命令得:
[python]  view plain  copy
  1.    
  2. ['NIAO''JERRY''WENDY''SMITH']  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值