小序
天道酬勤,小憩更佳
平常心看待,一草一木皆是风景
正文
异常
在Python中,程序在执行的过程中产生的错误称为异常,比如列表索引越界、打开不存在的文件等。
看下面这个例子
显然,a 之前并未声明使用过,123.txt 文件也是未创建的
报错如下
这便是出现了异常情况
具体的异常分类如下
异常类
异常类主要是下面几类
- NameError
尝试访问一个未声明的变量,会引发NameError - ZeroDivisionError
当除数为零的时候,会引发ZeroDivisionError异常 - SyntaxError
当解释器发现语法错误时,会引发SyntaxError异常 - IndexError
当使用序列中不存在的索引时,会引发IndexError异常 - KeyError
当使用映射中不存在的键时,会引发KeyError异常 - FileNotFoundError
试图打开不存在的文件时,会引发FileNotFoundError - AttributeError
当尝试访问未知对象属性时,会引发AttributeError异常
下面就看看如何去解决这些异常
异常处理
try-except 语句定义了监控异常的一段代码,并提供了处理异常的机制
try:
# 语句块
except:
# 异常处理代码
处理多个异常 的try-except语句格式如下:
try:
# 语句块
except 异常名称1:
# 异常处理代码1
except异常名称2:
# 异常处理代码
…
当出现多种异常时,为了区分不同的错误信息,可以使用as获取系统反馈的信息
# 获取描述信息
except (ZeroDivisionError, ValueError) as result:
print("捕捉到异常:%s"%result)
当程序中出现大量异常时,捕获这些异常是非常麻烦的。
这时,我们可以在except子句中不指明异常的类型,这样,不管发生何种类型的异常,都会执行except里面的处理代码.
如果try语句没有捕获到任何的错误信息,就不再执行任何except语句,而是会执行else语句。
eg 1.
def get_score():
try:
score = int(input('输入成绩: '))
except ValueError:
return 0
return score
score = get_score()
print('学生的成绩是:', score)
eg 2.
def get_score():
score = int(input('输入成绩: '))
if score in range(101):
return score
else:
return 0
try:
score = get_score()
print('学生的成绩是:', score)
except ValueError:
score = 0
print('学生的成绩是:', score)
终止行为(finally)
在程序中,无论是否捕捉到异常,都必须要执行某件事情,例如关闭文件、释放锁等,这时可以提供finally语句处理。通常情况下,finally用于释放资源。
抛出异常
raise 语句
使用raise语句能显示地触发异常,格式如下
- 使用类名引发异常
当raise语句指定异常的类名时,会创建该类的实例对象,然后引发异常
- 使用异常类的实例引发异常
- 传递异常
不带任何参数的raise语句,可以再次引发刚刚发生过的异常
作用就是向外传递异常
- 指定异常的描述信息
- 异常引发异常
使用raise…from…可以在异常中抛出另外的异常
try:
num
except Exception as exception:
raise IndexError("下标超出范围") from exception
try 里面只定义了变量 num,会引发 NameError异常。
except子句使用 raise…from… 抛出NameError异常后再抛出“下标越界”的异常
eg 3.
def get_age():
age = int(input('请输入年龄(1-140):'))
if age in range(1, 141):
return age
raise ValueError # 故意抛出异常
while True:
try:
age = get_age()
print('用户输入的年龄是:', age)
except ValueError: # 接收抛出的异常
print('用户输入的年龄不在1-140之间,获取年龄失败!')
自定义异常
创建一个继承Exception类的子类,就是自定义异常类。
当遇到自己设定的错误时,使用raise语句抛出自定义的异常
总结
总的来说,Python的异常处理相对来说较为简单,应用也极易上手
但是它发挥的功能却是不可忽视的
在程序运行的过程中,难免会出现千奇百怪的错误
如何全面的考虑到错误,合理地使用异常处理
能够避免出现一些运行的bug
本篇文章围绕着Python的异常进行介绍,
包括异常类、抛出和捕捉系统内置的异常、抛出和捕捉自定义异常。
读者应了解异常的产生和原理,灵活使用异常处理
其效果往往是绝佳的
结束语
美好的一天开始啦!