知识点 异常的定义
# 1、捕获任何异常
try:
会出错的代码块
except:
异常后逻辑处理
# 2、捕获特定异常
try:
会出错的代码块
except IndexError: # 仅仅捕获下标越界的异常,非这样的异常都会再次抛出
异常后逻辑处理
# 3、打印异常信息
try:
会出错的代码块
except Exception as error: # except as error 这样不行
异常后逻辑处理
print(error)
# 4、处理完异常后始终执行
try:
会出错的代码块
except:
异常后逻辑处理
finally:
不管异常是否被捕获,都将执行
# 手动写异常
try:
raise IndexError ("异常提示消息") # 注意啊 不能和except捕获的异常一致,否则会进except
except keyError:
print("异常信息")
知识点 列表推导式
1.列表推导式会遍历后面的可迭代对象,然后按照for前的表达式进行运算,生成最终的列表.
2.如果有if条件语句,for遍历后紧跟着进行条件判断.
3.如果有多个for循环,则最终的数据数量为多个for循环的笛卡尔积.
4.可以进行嵌套的列表推导,与嵌套for循环的原理相同
列表推导、字典推导,这位大佬讲的很详细了
练习
题目:
优化去生鲜超市买橘子程序
a.收银员输入橘子的价格,单位:元/斤
b.收银员输入用户购买橘子的重量,单位:斤
c.计算并且 输出 付款金额
d.使用捕获异常的方式,来处理用户输入无效数据的情况
def settlement():
price = input("请输入您橘子的购买价格:")
weight = input("请输入购买的橘子数量:")
if float(price)< 0 or float(weight) <=0:
return ("亲~ 不能为负数或0哦~")
# or
# reise keyError("不能是负数哦") # 中断程序
try:
return (f"您所需的付款金额为: {float(price) * float(weight)}")
except ValueError as err:
print("报错内容为ValueError:", err)
except TypeError as err:
print("报错内容为TypeError:", err)
except Exception as err:
print("报错内容为TypeError:", err)
题目:举列数据异常,并捕获
def errorlist(type,*args):
try:
if type==1:
return args[2]
if type ==2:
return int(args[0]) + int(args[1])
if type ==3:
return args[0] + args[1]
if type ==4 :
return int(args[0]) / int(args[1])
if type ==5 :
return args[0][3]
if type ==6 :
return open(args[0], encoding="utf-8")
except IndexError as error: # errorlist(1,2,1)
print("IndexError",error)
except TypeError as err: # errorlist(3,"www",1)
print("报错内容为TypeError:", err)
except ValueError as err: # errorlist(2,"www","222")
print("报错内容为ValueError:",err)
except ZeroDivisionError as err: # errorlist(4,2,0)
print("报错内容为ZeroDivisionError:", err)
except KeyError as err: # errorlist(5,{"2":"0"})
print("报错内容为KeyError:", err)
except IOError as err: # errorlist(6,"test.txt")
print("报错内容为IOError:", err)
except Exception as err:
print("未知错误:",err)
print(errorlist(6,"test.txt"))