1.异常
1.异常
异常是错误发生信号,一旦程序出错就会产生一个异常,如果该异常
没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止
异常包含三个部分:
1.异常的追踪信息 File "E:/PycharmProjects/pythonProject/图灵/day6/1.异常.py", line 8, in <module>
2.异常的类型 NameError
3.异常的信息 name 'aaa' is not defined
错误分为两大类:
1.语法上的错误:在程序运行前就应该立即修正,这个好避免
2.逻辑上的错误:比如:字典没有key 你非要去key
列表没有索引非要取索引
变量没有名字等等
2.为何要处理异常
避免程序因为异常而崩溃,所以在应用程序中应该对异常进行处理,从而增强程序的健壮性
3.如何处理异常
try:
代码1
代码2
代码3
.........
except NameError:
当抛出的异常时NameError时执行的子代码块
except ......:
pass
else:
pass
常见异常
# NameError
aaa
# TypeError
print(1+'1')
# KeyError
d = {'x':1,'y':2}
d['z']
# IndexError
L = [1,2]
L[2]
异常处理的单分支
try:
a = 1
except NameError as f:
print('检查您的代码')
print(f)
else:
# 程序没有抛出异常的时候执行
print('代码正确')
finally:
# 不管有错没错 一定会执行的部分
print('完成了异常捕获')
异常处理的多分支
try:
a
print('============')
print('============')
print('============')
print('============')
L = [1,2]
L[2]
except NameError as f:
# 一旦捕获到异常
# 下面这些print都不会执行
# print('============')
# print('============')
# print('============')
# print('============')
print('检查您的代码')
print(f)
except IndexError as f:
print('检查您的代码')
print(f)
else:
# 程序没有抛出异常的时候执行
print('代码正确')
finally:
# 不管有错没错 一定会执行的部分
print('完成了异常捕获')
合并
try:
a
print('============')
print('============')
print('============')
print('============')
L = [1,2]
L[2]
except (NameError,IndexError) as f:
# 一旦捕获到异常
# 下面这些print都不会执行
# print('============')
# print('============')
# print('============')
# print('============')
print('检查您的代码')
print(f)
else:
# 程序没有抛出异常的时候执行
print('代码正确')
finally:
# 不管有错没错 一定会执行的部分
print('完成了异常捕获')
万能捕获
try:
a
print('============')
print('============')
print('============')
print('============')
L = [1,2]
L[2]
except Exception as f:
# 一旦捕获到异常
# 下面这些print都不会执行
# print('============')
# print('============')
# print('============')
# print('============')
print('检查您的代码')
print(f)
else:
# 程序没有抛出异常的时候执行
print('代码正确')
finally:
# 不管有错没错 一定会执行的部分
print('完成了异常捕获')
自定义异常
L = [1,2,3,4,5]
print(len(L))
# # 第一种方式 满足条件抛出异常
# if len(L) != 5:
# raise TypeError('列表的长度必须为4,这个是我的规则')
# 第二种方式 断言
assert len(L) == 4
2.购物车
import time
# time.sleep(5)
# print('我休息了5秒钟')
from typing import List, Union
user_dic = {
'name':'张晰', # 用户名
'password':'123', # 密码
'locked':False, # 锁定状态
'account':50000, # 余额
'shopping_cart':{} # 购物车字典
}
# 登录函数
def login():
'''
登录函数,密码输入错误3次锁定5秒,用户名输入错误可以一直输入
:return:
'''
print('请登录')
count = 0
while True:
name = input('请输入用户名').strip() # .strip() 去空格
if user_dic['locked']:
# 这个是锁定状态才会进来if判断 user_dic['locked']一定是True
print('密码输入错误3次锁定5秒,请5秒后重新登录')
time.sleep(5)
user_dic['locked'] = False
count = 0
if name == user_dic['name']:
# pass
pwd = input('请输入密码').strip()
if pwd == user_dic['password'] and user_dic['locked'] == False:
print('登陆成功')
break
else:
count += 1
else:
print('用户名不存在')
if count >= 3:
user_dic['locked'] = True
# # 登录装饰器
def login_intter(func):
def wrapper():
login()
func()
return wrapper
# login()
def shopping():
print('购物')
goods_list = [
['coffee',30], # 0
['chicken',20], # 1
['iPhone',10000], # 2
['car',100000], # 3
['buliding',200000] # 4
]
shopping_cart = {} # 自己的购物车
cost_money = 0 # 花费的钱
while True:
# 展示商品
# 枚举 enumerate
for i,item in enumerate(goods_list):
# i 是列表的索引号
# item是列表里面的数据
print(i,item)
choice = input('请输入商品对应编号,按t键结账').strip()
if choice.isdigit():
# 判断字符串是否是数字
# 进入了这个里面,字符串您的数字
# print('是数字')
# 现在输入的是字符串的数字
choice = int(choice)
# 否定的条件 不能是那些数字
if choice < 0 or choice >= len(goods_list):
print('请输入相应的编号')
continue
# print('这个是合法的数字')
# print(goods_list[choice])
# # 商品
# print(goods_list[choice][0])
# # 价格
# print(goods_list[choice][1])
# 商品
goods_name = goods_list[choice][0]
# 价格
goods_price = goods_list[choice][1]
# 用户的余额大于等于商品的价格 才能购物
if user_dic['account'] >= goods_price:
if goods_name in shopping_cart:
# 'coffee': {'price': 30,'count':1}
# print('您又输入了同样的商品')
# print(shopping_cart[goods_name])
shopping_cart[goods_name]['count'] += 1
shopping_cart[goods_name]['price'] = shopping_cart[goods_name]['count'] * goods_price
# 一个商品购买过 'coffee': {'price': 30, 'count': 1}
# 第一次购买将进入else
else:
shopping_cart[goods_name] = {'price':goods_price,'count':1}
# print(shopping_cart)
# 账户的金额 = 账户的金额 - 商品的价格
user_dic['account'] -= goods_price
# 花费的金额 = 花费的金额(一开始是0)+ 商品的价格
cost_money += goods_price
# 提示用户这一次你加入购物车的商品名字
print('%s新的商品'%goods_name)
else:
print('钱不够')
# 结账部分
elif choice == 't':
print('结账')
print(shopping_cart)
buy = input('买不买(y/n)>>>>').strip()
if buy == 'y':
if cost_money == 0:
print('不买只看')
break
# 把购物车的信息存到用户信息里面去
user_dic['shopping_cart'] = shopping_cart
print()
else:
print('非法输入')
shopping()