Python中的异常处理

时间:2020-7-27 作者:admin


一、程序的异常处理
异常处理是现代编程语言不可或缺的能力,它已经成为衡量一门编程语言是否已经成熟和健壮的标准之一。

例如在二级编程题中有一个‘猜数字’游戏,如下

import random
target = random.randint(1,1000)
count = 0
while True:
    guess = eval(input('请输入一个猜测的整数(1至1000):'))
    count = count+1
    if guess > target:
        print('猜大了')
    elif guess < target:
        print("猜小了")
    else:
        print("猜对了")
        break
print("本轮猜测的次数是:{}".format(count))

该游戏会产生一个1-1000的随机数,然后请用户循环猜这个数字,对于每个答案只回答”猜大了”或”猜小了”,直到猜准确为止,输出用户的猜测次数

下面附上运行结果


请输入一个猜测的整数(11000)500
猜大了
请输入一个猜测的整数(11000)100
猜大了
请输入一个猜测的整数(11000)1
猜小了
请输入一个猜测的整数(11000):abc
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-8c063bff509d> in <module>
      3 count = 0
      4 while True:
----> 5     guess = eval(input('请输入一个猜测的整数(1至1000):'))
      6     count = count+1
      7     if guess > target:

<string> in <module>

NameError: name 'abc' is not defined

可以看到我们无法保证用户会输入什么数据,输入有误程序就会报错,这时异常处理的作用就体现出来了

仔细观察下面的代码

import random
target = random.randint(1,1000)
count = 0
while True:
    try:
        guess = eval(input('请输入一个猜测的整数(1至1000):'))
    except:
        print("输入格式有误,请重新输入")
        continue
    count = count+1
    if guess > target:
        print('猜大了')
    elif guess < target:
        print("猜小了")
    else:
        print("猜对了")
        break
print("本轮猜测的次数是:{}".format(count))

可以看到在第五行和第七行分别加了try和except语句

运行结果如下:


请输入一个猜测的整数(11000)500
猜大了
请输入一个猜测的整数(11000)100
猜大了
请输入一个猜测的整数(11000)1
猜小了
请输入一个猜测的整数(11000):abc
输入格式有误,请重新输入

请输入一个猜测的整数(11000)

结果显而易见,所以程序的异常处理是非常有必要的

二、异常的高级用法
其实程序的异常处理还有一些略微高级的用法,这些用法也十分常用。
例题如下:

try:
    alp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    idx = eval(input("请输入一个整数:"))
    print(alp[idx])
except NameError:
    print("输入错误,请输入一个0-25的整数")
except:
    print("其它错误")

运行结果如下:

请输入一个整数:NO
输入错误,请输入一个0-25的整数

请输入一个整数:100
其它错误

除了try和except保留字外,异常语句还可以与else和finally保留字配合使用,语法格式如下:

try:
	<语句块1>
except <异常类型1>:
	<语句块2>
else:
	<语句块3>
finally:
	<语句块4>

当try中的语句块1正常执行结束且没有发生异常时,else中的语句块3执行,可以看作是对try语句块正常执行后的一种追加处理。finally语句块则不同,无论try中的语句块1是否发生异常,语句块4都会执行,可以将程序执行语句块1的一些收尾工作放在这里。

小伙伴们赶快找个例子练练手吧

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。