捕获多种异常
下面存在三种异常:ValueError、KeyboardInterrupt 和其他异常,分别捕获并输出相应的提示语句
当用户输入123以外的字符时出现ValueError异常,这时提示用户输入数字1-3;当用户在输入数字后Ctrl+C时出现KeyboardInterrupt异常,输出nCtrl + C,操作已中断!;当出现其他异常时输出Something Error!
# 02 - 捕获多种异常.py
banner = '''-----------------------------------
预测年龄脚本:
1. 预测年龄
2. 其他
3. 其他
...
-----------------------------------
'''
print(banner)
choice = input("Please input the number: ")
choice = int(choice)
if choice !=1:
print("好好学习...")
exit()
try:
age = input("Please input your age: ")
print(f"The next year your name: {int(age) + 1}")
except ValueError:
print("Please input a number!")
except KeyboardInterrupt:
print("\nCtrl + C,操作已中断!")
except:
print("\nSomething Error!")
如下图,输入emt和Ctrl+C都会捕获异常并输出提示语句,只有输入数字才会正常执行:
处理异常
- else 子句:在try 范围中没有异常被检测到时,执行else 子句。在else 范围中的任何代码运行前,try 范围中的所有代码必须完全成功。
- finally 子句:finally 子句是无论异常是否发生,是否捕捉,都会执行的一段代码。比如获取用户的输入,写入文件,但是如果在获取数据过程中,发生了异常,就会导致整个脚本结束执行,文件也无法关闭了。为了解决这个问题,可以采用异常处理中的finally 子句,也就是说,无论语句是否正常执行,都需要关闭。
下面语句中,try和else搭配,只有当try成功执行,才会执行else中的语句,否则会捕获异常并输出信息,最后的finally中的语句,无论有没有异常都会执行。
# 03 - 处理异常.py
banner = '''-----------------------------------
预测年龄脚本:
1. 预测年龄
2. 其他
3. 其他
...
-----------------------------------
'''
print(banner)
choice = input("Please input the number: ")
choice = int(choice)
if choice != 1:
print("好好学习...")
exit()
try:
age = input("Please input your age: ")
age = int(age)
except ValueError:
print("Please input a number!")
except KeyboardInterrupt:
print("\nCtrl + C,操作已中断!")
except:
print("\nSomething Error!")
else:
print(f"The next year your name: {age + 1}")
finally:
print("脚本执行结束,祝你好运!")
如下图,该脚本执行后都会输出finally中的语句,只有当try成功执行,才会执行else中的语句,否则会捕获异常并输出信息: