Python异常处理及其“升级”

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

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

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的一些收尾工作放在这里。

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗阿强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值