异常捕获与推导式

异常捕获

1.什么是异常

异常就是程序在运行当中遇到的报错

为了程序的健壮性,就要捕获到指定异常并对异常进行处理

异常处理包括:断掉程序,重启程序,进入到指定的处理流程。

2.捕获异常

普通的if是捕获不到的

使用python自带的异常捕获语法进行捕获

【1】 try…except….一起使用

print(int('1'))    
try:
    print(int('a'))
    # 异常捕获的try语法要和except搭配
except:
    print(f'报错了')
   

3.异常捕获语法详细

当我们在程序中对某一快代码比较熟悉 我就能确保这块代码的报错一定是某一个

指定捕获指定的是异常

print(int('1'))
try:
    print(int('a'))
    # 异常捕获的try语法要和except搭配
except ValueError:
    print(f'报错了{ValueError}')   # 报错了<class 'ValueError'>

多分支异常捕获

try:
    print(int('a'))
    print(1/0)
except ValueError:
    print(ValueError)
except ZeroDivisionError:
    print(ZeroDivisionError)

4. 捕获基本异常

try:
    print(int('a'))
except Exception as e:
    print(e)
# invalid literal for int() with base 10: 'a'

5.触发异常

达到某个条件的时候我想要主动触发异常

for i in range(10):
    if i == 6:
        # 主动报错
        # raise 错误类型
        raise ValueError('不能为6') # ValueError: 不能为6

6.断言

达到某个为真的条件抛出

for i in range(0,10):
    # 在源码中会大量出现
    assert i == 6,'不能为6'
# AssertionError: 不能为6

推导式

【1】固定语法

(1)列表推导式

[表达式 for i in 列表/字典/可迭代类型]

[字符串切分/去重空格 for i in 列表/字典/可迭代类型]

[if 判断 for i in 列表/字典/可迭代类型]

(2)字典推导式

{key : value for key in 可迭代类型 for value in 可迭代类型}

【2】列表推导式案例

(1)直接用range关键字构建列表

# 列表生成式
num_list = [i for i in range(10)]
print(num_list)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 原始
num_list = []
for i in range(10):
    num_list.append(i)
print(num_list)

(2)遍历列表

# 原始
name_list = ['silence', 'happy']
name_list_new = []
for name in name_list:
    name_list_new.append('nb_'+ name)
print(name_list_new)  # ['nb_silence', 'nb_happy']
#修改后的
name_list = ['silence', 'happy']
name_list = ['nb_' + i for i in name_list]
print(name_list)

(3)对每个空格进行取出空格

# 原始
user_data = []
with open('user_data.text', 'r', encoding='utf_8') as fp:
    for line in fp:
        user_data.append(line.strip())
#修改后
with open('user_data.text', 'r', encoding='utf_8') as fp:
    user_data_list = [line.strip() for line in file]
print(user_data_list)

(4)利用一个元素生成新的列表

num_list = [i for i in range(10)]
num_list = [[num, num*num]for num in num_list]
print(num_list)
#[[0, 0], [1, 1], [2, 4], [3, 9], [4, 16], [5, 25], [6, 36], [7, 49], [8, 64], [9, 81]]

(5)行列转换

# 原始
test = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
num_list = []
for i in range(len(test[0])):
    num_list_ = []
    for row in test:
        num_list_.append(row[i])
    num_list.append(num_list_)
print(num_list)

# 精简
test = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
list_new =[[row[i] for row in test] for i in range(len(test[0]))]
print(list_new)

(6)加入条件进行过滤


test = [1,2,3,4,5,6,7,8,9]
list_one = [x for x in test if x % 2 == 0]
print(list_one) # [2, 4, 6, 8]

【3】字典推导式案例

# 原始
user_data_dict = {}
with open('user_data.txt', 'r', encoding='utf-8') as fp:
    for line in fp:
        username, password = line.strip().split('|')
        user_data_dict[username] = password
print(user_data_dict)

# 精简
with open('user_data.txt', 'r', encoding='utf-8') as fp:
    user_data_dict= {line.strip().split('|')[0]:line.strip().split('|')[1] for line in fp}
print(user_data_dict)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值