1. 异常捕获
1.1 异常分类
内建异常:Python解释器自带的异常捕获机制
自定义异常:主动抛出的异常
1.2 如何主动抛出异常
关键字 raise
raise [Exception [, args [, traceback]]]
1.3 主动捕获异常
(1)不带异常信息
(2)只有单一的异常信息
(3)捕获多个异常信息
(4)捕获所有异常信息
Exception 捕获所有异常类型
当代码没有抛出异常,结束正常代码会自动执行else语句
try: a = 1 + 2 except Exception as c: # 在处理异常时可以通过变量c查看当前的异常类型和异常信息 print(f'程序异常{c}') else: print(6) finally: print(666) # 6 # 666
代码抛出或不抛出异常都会执行finally语句
try: a = 1 + n except Exception as c: # 在处理异常时可以通过变量c查看当前的异常类型和异常信息 print(f'程序异常{c}') else: print(6) finally: print(666) # 程序异常name 'n' is not defined # 666
1.4 assert断言
如果断言的条件为False,则会触发异常
语法:
assert condition, message
condition:断言的条件,如果为False,则触发异常。
message:可选参数,用于指定触发异常时的错误消息。
2. 生成式
2.1 列表推导式
[表达式 for 变量名 in 可迭代类型 if 条件]
列表推导式举例:
(1)构建一个列表
a = [] for i in range(10): a.append(i) print(a) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b = [j for j in range(10)] print(b) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
(2)生成一个从1~9的数字的平方的列表
c = [i**2 for i in range(1, 10)] print(c) # [1, 4, 9, 16, 25, 36, 49, 64, 81]
(3)嵌套循环
# 第一个列表中的每个元素,逐个乘以第二个列表中的所有元素 x = [1, 2, 3] y = [4, 5, 6] z = [] for i in x: for j in y: res = i * j z.append(res) print(z) # [4, 5, 6, 8, 10, 12, 12, 15, 18] # 使用列表推导式改写 a = [i * j for i in x for j in y] print(a) # [4, 5, 6, 8, 10, 12, 12, 15, 18]
# 列表对应相同索引位置上的数相乘 a = [3, 6, 9] b = [3, 6, 9] c = [a[i] * b[i] for i in range(len(a))] print(c) # [9, 36, 81]
(4)行列转换
a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] new_list = [] # 第一次取第一列,第二次取第二列,第三次取第三列,第四次取第四列 for i in range(len(a[0])): # 1.开始外圈循环,外圈1次,内圈3次 new_list_inner = [] # 3.每次开始外圈循环时,该列表为空,接收第i次外圈循环原来小列表中索引为i的值组成的小列表 for j in a: new_list_inner.append(j[i]) # 2.内圈循环 # 第1次外圈循环 列表1 列表2 列表3的0号索引值加到新列表中 # 第2次外圈循环 列表1 列表2 列表3的1号索引值加到新列表中 # 第3次外圈循环 列表1 列表2 列表3的2号索引值加到新列表中 # 第4次外圈循环 列表1 列表2 列表4的3号索引值加到新列表中 new_list.append(new_list_inner) # 4.将i次外圈循环产生的i个小列表作为元素添加到一个大列表中 print(new_list) print([[j[i] for j in a] for i in range(len(a[0]))]) # [[1, 5, 9], # [2, 6, 10], # [3, 7, 11], # [4, 8, 12]]
a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] # 第一次取第一列,第二次取第二列,第三次取第三列,第四次取第四列 new_l_list = [] for i in range(len(a)[0]): # i = 0 1 2 3 new_s_list = [] for j in a: new_s_list.append(j[i]) # 第一次循环将原来第1,2,3个小列表中的0号索引取出来并产生新的小列表 new_l_list.append(new_s_list) # 每一次循环都将产生的小列表添加到新的大列表中 print(new_l_list) # [[1, 5, 9], # [2, 6, 10], # [3, 7, 11], # [4, 8, 12]]
(5)加入判断条件
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] b = [] for i in a: if i % 3 == 0: b.append(i) print(b) # [3, 6, 9] print([i for i in a if i % 3 == 0]) # [3, 6, 9]
2.2 字典生成式
{k:v for k in 可迭代对象1:for v in可迭代对象2 if 表达式}
tuple_list = [('name', 'messi'), ('age', 37), ('goal', 91), ('club', 'psg')] a = {} for i in tuple_list: # i = ('name', 'messi') k, v = i a[k] = v print(a) # {'name': 'messi', 'age': 37, 'goal': 91, 'club': 'psg'} print({k: v for k, v in tuple_list}) # {'name': 'messi', 'age': 37, 'goal': 91, 'club': 'psg'}
2.3 元组生成式
a = (i for i in range(10) if i % 3 == 0) print(a, type(a)) # 生成器对象 # <generator object <genexpr> at 0x0000012BDC3193F0> <class 'generator'> b = [i for i in range(10) if i % 3 == 0] print(b, type(b)) # [0, 3, 6, 9] <class 'list'>
标签:10,捕获,生成式,list,列表,print,new,异常 From: https://www.cnblogs.com/hbutmeng/p/18321178