异常
1. 定义:运行时检测到的错误。
2. 现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句。
3. 常见异常类型:
-- 名称异常(NameError):变量未定义。
-- 类型异常(TypeError):不同类型数据进行运算。
-- 索引异常(IndexError):超出索引范围。
-- 属性异常(AttributeError):对象没有对应名称的属性。
-- 键异常(KeyError):没有对应名称的键。
-- 异常基类 Exception。
"""
异常处理
不是检测语法用的,而是检测逻辑错误(往往数值超过有效范围引起)
"""
"""
异常处理 Error
目的:保障软件可以按照既定流程执行,而不是让软件单纯的不报错
"""
# 不适用以下语法错误:
# print(qtx)
# list01 = []
# print(list01[0])
# list 02 = [
# 适用于解决逻辑错误(数值超过有效范围而引起):
"""
def div_apple(apple_count):
# ValueError
person_count = int(input("请输入人数:"))
# ZeroDivisionError
result = apple_count / person_count
print(f"每人{result}个")
div_apple(10)
"""
# 现象:错误了不继续向下执行,而是不断向上返回,调试看执行过程
"""
def div_apple(apple_count):
# ValueError
person_count = int(input("请输入人数:"))
# ZeroDivisionError
result = apple_count / person_count
print(f"每人{result}个")
def main():
div_apple(10)
main()
print("不继续后续逻辑")
"""
# 解决方法
# 写法1:包治百病(民间喜好) 用得多-----掌握这个就行
#try失败就干嘛干嘛,成功就不执行失败的那个干嘛干嘛
"""
def div_apple(apple_count):
try:
# ValueError
person_count = int(input("请输入人数:"))
# ZeroDivisionError
result = apple_count / person_count
print(f"每人{result}个")
# except Exception:(后来直接except简化)
except:
print("分苹果失败")
div_apple(10)
print("继续后续逻辑")
"""
# 写法2:对症下药(官方建议)用得少
"""
def div_apple(apple_count):
try:
# ValueError
person_count = int(input("请输入人数:"))
# ZeroDivisionError
result = apple_count / person_count
print(f"每人{result}个")
except ValueError:#根据内置的关键字来判断
print("错误!输入的不是整数")
except ZeroDivisionError:
print("错误!输入的是零")
div_apple(10)
print("后续逻辑")
"""
# 写法3:finally:无论是否发生错误,一定执行的逻辑
#try 成功与失败都干嘛干嘛
"""
def div_apple(apple_count):
try:
person_count = int(input("请输入人数:"))
result = apple_count / person_count
print(f"每人{result}个")
# 打开文件
# 处理文件
finally:#不论处理是否成功,都要关闭文件
print("分苹果结束啦,不知道成功与否")
# 关闭文件
div_apple(10)
print("继续后续逻辑")
"""
# 写法4:没有错误才执行的逻辑,有错误"分苹果失败",没错误"分苹果成功"----用得少
#try的部分成功就干嘛干嘛,失败就干嘛干嘛
def div_apple(apple_count):
try: # 可以与else配对用
person_count = int(input("请输入人数:"))
result = apple_count / person_count
print(f"每人{result}个")
except:
print("分苹果失败")
else:
print("分苹果成功")
div_apple(10)
print("继续后续逻辑")
练习:创建函数,在终端中录入int类型成绩。 如果格式不正确,重新输入。
def get_score():
while True:
try:
score = int(input("请输入成绩"))
return score
except:
print("输入有误")
score = get_score()
print("成绩是 : %d " % score)