异常处理结构与单元测试

  • 异常是指程序运行时引发的错误,引发错误的原因有很多,例如除零、下标越界、文件不存在、网络异常、类型错误、名字错误、字典键错误、磁盘空间不足等。

  • 如果这些错误得不到正确的处理将会导致程序终止运行,而合理地使用异常处理结构可以使得程序更加健壮,具有更强的容错性,不会因为用户不小心的错误输入或其他运行时原因而造成程序终止。也可以使用异常处理结构为用户提供更加友好的提示。

  • 程序出现异常或错误之后是否能够调试程序并快速定位和解决存在的问题也是程序员综合水平和能力的重要体现方式之一。

11.1.1 异常的概念与表现形式

  • 当程序执行过程中出现错误时Python会自动引发异常,程序员也可以通过raise语句显式地引发异常。
  • 异常处理是因为程序执行过程中由于输入不合法导致程序出错而在正常控制流之外采取的行为。
  • 严格来说,语法错误和逻辑错误不属于异常,但有些语法错误往往会导致异常,例如由于大小写拼写错误而试图访问不存在的对象,或者试图访问不存在的文件,等等。当Python检测到一个错误时,解释器就会指出当前程序流已经无法再继续执行下去,这时候就出现了异常。

异常的表现形式:
在这里插入图片描述

11.1.2 内置异常类层次结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.1.3 异常处理结构

在这里插入图片描述

while True:
    x = input("please input:")
    try:
        x = int(x)
        print("you have input{0}".format(x))
        break

    except Exception as e:
        print("error")

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

print(chr(65)) # chr => character 里面接受整数
print(ord('A')) # 65

在这里插入图片描述
异常的高级用法:
在这里插入图片描述
在这里插入图片描述

# 输入若干个成绩,求所有成绩的平均分.没输入一个成绩后徐闻是否继续输入\
# 下一个成绩,回答"yes"就继续输入下一个成绩,回答"no"就停止输入成绩.

numbers = [] # 使用列表存放临时数据
while True:
    x = input('请输入一个成绩:')
    try:
        numbers.append(float(x))
    except:
        print('不是合法成绩')
    while True:
        flag = input('继续输入吗? (yes/no)')
        if flag.lower() not in ('yes','no'): # 限定用户输入的内容必须为yes or not
            print('只能输入yes或no')
        else:
            break
    if flag.lower() == 'no':
        break
print(sum(numbers)/len(numbers))
# 编写代码:
# 模拟决赛现场最终成绩的计算过程.
while True:
    try:
        n = int(input("请输入评委人数: "))
        if n <= 2:
            print('评委人数太少,必须多于2个人')
        else:
            break
    except:
        pass

scores = []
for i in range(n):
    # 这个while循环用来保证用户必须输入0-100之间的数字
    while True:
        try:
            score = input('请输入第{0}个评委的分数:'.format(i+1))
            # 把字符串转换为实数
            score = float(score)
            assert 0<=score<=100
            scores.append(score)
            # 如果数据合法,跳出while循环,继续输入下一个评委的分数
            break
        except:
            print('分数错误')

# 计算并删除最高分和最低分
highest = max(scores)
lowest = min(scores)
scores.remove(highest)
scores.remove(lowest)
finalScore = round(sum(scores)/len(scores),2)
formatter = '去掉一个最高分{0} \n 去掉一个最低分{1}\n最后得分{2}'
print(formatter.format(highest,lowest,finalScore))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值