小样的第七次学习博客——Python之异常处理
声明
本人是一名计算机专业大一学生(23级),写博客目的是巩固所学,以及当作笔记。如有雷同,必是我学过来的。如有错误,还望指出,大佬轻喷
参考书籍:《Python语言程序设计基础》(第2版)嵩天 礼欣 黄天羽 著
什么是异常处理
举个例子:当程序中有需要用户输入时,总有用户有意或无意不按要求输入,比如,要求输入数字+单位,用户只输入了数字,当碰到这种情况时,程序会报错,然后终止运行。
我们肯定不想因为用户输入错误这样一件小事就使程序终止,所以我们给程序加上异常处理,使程序在遇到预料之外的错误(如用户输入错误,文件不存在)时也能继续运行,或者给出用户提示到底是哪里错了,怎么修改。
小实例
这是没有做异常处理的代码
num = eval(input("请输入一个整数:")) //eval()函数在此处起到类型转换的作用,将字符型转换为整型
print(num**2)
.....
如若用户输入的不是整数,或者还输入了字符等,程序就会报错终止
加异常处理
try:
num = eval(input("请输入一个整数:")) //eval()函数在此处起到类型转换的作用,将字符型转换为整型
print(num**2)
except:NameError:
print("输入错误,请输入一个整数") //给出提示,示意刚才输入错误,请用户正确输入
紧跟在except后面的是异常类型,当try语句部分
- 发生except后的异常类型时,执行except语句,不报错;
- 发生的不是except后的异常类型,不执行except语句,报错;
- 无异常,不执行except语句,不报错。
其他常见的异常类型有:
ZeroDivisionError:当除数为零时引发。
FileNotFoundError:当尝试打开一个不存在的文件时引发。
ValueError:当传递给函数的参数类型正确但值不合适时引发。
TypeError:当操作或函数应用于不适当类型的对象时引发。
IndexError:当序列中没有此索引时引发。
KeyError:当字典中没有这个键时引发。
ImportError:当无法导入模块或包时引发。
注意:可以同时捕获多种异常类型,只需在except后面用括号括起来,用逗号分隔即可,或者写多个except
进阶版异常处理
如下
try:
alp = "abcdefghijk"
idx = eval(input("请输入一个整数:"))
print(alp[idx])
except (NameError,IndexError):
print("请输入一个整数,且该0<=整数<<=10")
else:
print("用户输入正常")
finally:
print("程序执行完成,不知是否发生异常")
也可以写多个except,一个except负责一种异常
try:
alp = "abcdefghijk"
idx = eval(input("请输入一个整数:"))
print(alp[idx])
except NameError:
print("请输入一个整数,且0<=整数<<=10")
except IndexError:
print("0<=整数<<=10")
else:
print("用户输入正常")
finally:
print("程序执行完成,不知是否发生异常")
我们在异常处理中加入了else和finally
- except语句和else语句,二选一执行,即要么执行except,要么执行else,要么报错;
- finally语句一定会执行。