-
异常是指程序运行时引发的错误,引发错误的原因有很多,例如除零、下标越界、文件不存在、网络异常、类型错误、名字错误、字典键错误、磁盘空间不足等。
-
如果这些错误得不到正确的处理将会导致程序终止运行,而合理地使用异常处理结构可以使得程序更加健壮,具有更强的容错性,不会因为用户不小心的错误输入或其他运行时原因而造成程序终止。也可以使用异常处理结构为用户提供更加友好的提示。
-
程序出现异常或错误之后是否能够调试程序并快速定位和解决存在的问题也是程序员综合水平和能力的重要体现方式之一。
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))