一、自定义异常
(通过自定义来编辑报错提示信息,代码报错以后会在输出框打印出来)例:
- class sexExcption(Exception):
- '''''
- 自定义性别异常类
- '''
- pass
- try:
- sex=input('请输入性别:')
- if sex!='男' and sex!='女':
- raise sexExcption('性别只能是男或女')#定义报错提示
- except sexExcption as ex:
- print(ex)
- finally:
- print('程序结束')
- 请输入性别:哈哈
- 性别只能是男或女
- 程序结束
二、日志
概念:
日志是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个可包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。
作用:
- 程序调试
- 了解软件程序运行情况,是否正常
- 软件程序运行故障分析与问题定位
日志等级
日志等级(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的日志记录 | |
| 创建一条严重级别为ERROR的日志记录 | |
logging.critical(msg, *args, **kwargs) | 创建一条严重级别为CRITICAL的日志记录 | |
logging.log(level, *args, **kwargs) | 创建一条严重级别为level的日志记录 | |
logging.basicConfig(**kwargs) | 对root logger进行一次性配置 |
组件 | 说明 |
loggers | 提供应用程序代码直接使用的接口 |
handlers | 用于将日志记录发送到指定的目的位置 |
filters | 提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略) |
formatters | 用于控制日志信息的最终输出格式 |
- import logging
- log_format='%(asctime)s - %(levelname)s - %(message)s'
- DATE_FORMAT = "%m/%d/%Y %H:%M:%S %p"#时间颠倒写法 不需要则可以去掉
- logging.basicConfig(filename='my.log',level=logging.DEBUG, format=log_format,datefmt=DATE_FORMAT)
- logging.debug('this is a debug')
- logging.info("This is a info log.")
- logging.warning("This is a warning log.")
- logging.error("This is a error log.")
- logging.critical("This is a critical 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个,不重复,得到一个列表,但是没有排序
- import random#使用随机数时必须先导入随机数模块
- print(random.choice(range(1,10)))#1-10随即一个数字
- print(random.choices(range(1,30),k=6,weights=range(1,30)))#1-30随机6个数字 k代表选取个数weights代表权重值
- print(random.sample(range(1,30),6))#随机6个不重复的数字
- 3
- [9, 18, 13, 27, 29, 19]
- [16, 1, 19, 4, 9, 8]
四、模块
代码格式import sys(必须先引入)
print(sys.path)路径。打印后是一个列表,可以向其中追加路径
reload()重新加载路径
模块互相调用不可以,会产生死锁
五、推导
推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点。推导式包括:1.列表推导式
2.字典推导式
3.集合推导式
<1>1.列表推导式
例:
- numbers = []
- for x in range(1,100):
- if x % 3 == 0:
- numbers.append(x)
- print(numbers)
- nums=[x for x in range(1,100) if x%3==0]
- print(nums)
- [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
- [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
例:
- nums1=(x for x in range(1,100) if x%3==0)
- print(type(nums1))
执行命令得:
- <class 'generator'>
<2>字典推导式
字典推导和列表推导的使用方法是类似的,只不过中括号该改成大括号
例:
快速更换key和value
代码:
- dict={'a':10,'b':14}
- new_dict={v:k for k,v in dict.items()}
- print(new_dict)
- {10: 'a', 14: 'b'}
列表推导式也是类似的。 唯一的区别在于它使用大括号{},Python会自动识别字典和集合
例:
打印2 3 5的平方 打印0到9的3次方
代码:
- set={x**2 for x in (2,3,5)}
- print(set)
- set={x**3 for x in range(0,10)}
- print(set)
- {9, 4, 25}
- {0, 1, 64, 512, 8, 343, 216, 729, 27, 125}
练习
1.求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元组列表- list1=[]
- for x in range(5):
- if x%2==0:
- for y in range(5):
- if y%2==1:
- list1.append((x,y))
- print(list1)#通过for遍历得
- list=[(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2==1]
- print(list)#通过推导得
- [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
- [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
- m=[[1,2,3],[4,5,6],[7,8,9]]
- list2=[x[0] for x in m]
- print(list2)
- print([m[x][x] for x in range(len(m))])
- print([m[x][len(m)-1-x] for x in range(len(m))])
- [1, 4, 7]
- [1, 5, 9]
- [3, 5, 7]
- names = ['bei','qi','niao','jerry','wendy','smith']
- print([name.upper() for name in names if len(name)>3])
- ['NIAO', 'JERRY', 'WENDY', 'SMITH']