学习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 = '')
酱哦
如果还有什么问题或者发现了文章的错误,欢迎给我留言!邮箱可以随便乱写~