异常信息处理

学习Python到现在,你应该已经遇到了各种各样的程序报错,什么NameError啊,SyntaxError啊,TypeError……这都是在学习程序中非常正常的过程。在Python中,我们将这些错误称为异常(exceptions)。异常实际上是一种流程控制,当异常出现时,正常的程序流程就被打断了,程序进而根据异常的种类做出相应的提示。

在我们前面的学习中,写过这样一个摄氏度与华氏度转换的程序

temp_C = eval(input('请输入现在的摄氏温度:'))
temp_F = temp_C * 1.8 + 32
print('当前温度为华氏', temp_F, '度', sep = '')

假设我们有一位耿直的用户是这么输入的:

请输入现在的摄氏温度:二十五摄氏度
Traceback (most recent call last):
  File "C:/Users/MSI/Desktop/1.py", line 1, in 
    temp_C = eval(input('请输入现在的摄氏温度:'))
  File "", line 1, in 
NameError: name '二十五摄氏度' is not defined

@%¥&#@#~!啥?这种错误提示显然对用户并不友好。这堆看不懂的东西,实际上是Python内部默认的异常处理机制(exceptions handler)。那么我们可不可以自定义异常的处理呢?

 

  • try和except命令

这是一组常用的处理异常的命令,简单的说就是先试试看try后面的代码能不能行,要是出现了异常,那就执行except后面的代码。我们把温度转换的程序改写一下,观察:

try:
    temp_C = eval(input('请输入现在的摄氏温度:'))
    temp_F = temp_C * 1.8 + 32
    print('当前温度为华氏', temp_F, '度', sep = '')

except:
    print('请用阿拉伯数字输入温度')

我们发现,try和except和前面的循环、条件写法很相像,冒号之后另起一行缩进后开始书写。改写之后,我们保存并运行,然后再次输入中文:

请输入现在的摄氏温度:二十五度
请用阿拉伯数字输入温度

啊哈,这就看得懂了。也就是说,Python在运行try之后的代码时,遇到了一个异常,因此,Python转而开始执行except后方的代码。

 

  • 本节练习

写一个猜数字游戏。从1-100之间的整数中随机抽取一个,引导用户猜数,对用户输入的数字做出“太小”、“太大”等提示,如果用户第一次输入的不是数字,提示用户只能用阿拉伯数字进行游戏。游戏表现如下:

谜底是1-100间的整数,请输入您的答案...:三十四
请输入纯阿拉伯数字啦...

谜底是1-100间的整数,请输入您的答案...:34
您猜小啦

再猜一次呗:60
您猜大啦

再猜一次呗:50
您猜大啦

再猜一次呗:40
您猜大啦

再猜一次呗:35
您猜小啦

再猜一次呗:36
猜对啦!答案是:36

看答案

import random

answer = random.randrange(1, 101)

try:
    num = eval(input('谜底是1-100间的整数,请输入您的答案...:'))
    
except:
    print('请输入纯阿拉伯数字啦...\n') #\n是换一行,方便用户看清
    num = eval(input('谜底是1-100间的整数,请输入您的答案...:'))

while num != answer:
    if num > answer:
        print('您猜大啦\n')
        num = eval(input('再猜一次呗:'))
    elif num < answer:
        print('您猜小啦\n')
        num = eval(input('再猜一次呗:'))

print('猜对啦!答案是:', answer, sep = '')

酱哦

 

如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~

发表评论

邮箱地址不会被公开。 必填项已用*标注