天道酬勤,小憩更佳
平常心看待,一草一木皆是风景
在Python中,程序在执行的过程中产生的错误称为异常,比如列表索引越界、打开不存在的文件等。
看下面这个例子
显然,a 之前并未声明使用过,123.txt 文件也是未创建的
报错如下
这便是出现了异常情况
具体的异常分类如下
异常类主要是下面几类
下面就看看如何去解决这些异常
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语句能显示地触发异常,格式如下
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的异常进行介绍,
包括异常类、抛出和捕捉系统内置的异常、抛出和捕捉自定义异常。
读者应了解异常的产生和原理,灵活使用异常处理
其效果往往是绝佳的
美好的一天开始啦!