异常(基础) exception
什么是错误
错误是指由于逻辑或语法等导入一个程序无法正常执行的问题
特点:
有些错误是无法预知的
什么是异常
异常是程序出错时标识的一种状态
当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态
作用:
用作信号,通知上层调用者有错误需要处理
try语句
两种语法:
try-except 语句
try-finally 语句
try-except语句语法
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
异常处理语句1
except 错误类型2 [as 变量2]:
异常处理语句2
except (错误类型3, 错误类型4) [as 变量3]:
异常处理语句3
...
except:
异常处理语句other
else:
末发生异常语句
finally:
最终语句
作用:
尝试捕获异常,将程序由异常状态转为正常状态并继续执行
try-except语句说明:
as字句是用来绑定错误对象的变量,可以省略
except字句可以有一个或多个,但至少有一个
else字句最多只能有一个,也可以省略不写
finally字句最多只能有一个,也可以省略不写
else字句的语句将在try语句没有异常时被执行
finally子句的语句在任何情况下都会被执行
示例见:
try_except.py
练习:
写一个函数:
def get_score():
....
此函数来获取用户输入的学生成绩信息(0~100的整数)
如果用户输入出现异常则此函数返回0,否则返回用户输入的成绩
score = get_score()
print("您输入的成绩:", score)
try-finally 语句
语法:
try:
可能触发异常的语句
finally:
一定要执行的最终语句
说明:
1. finally 子句不可以省略
2. 一定不存在except子句
作用:
通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行
注:
try-finally 语句不会改变程序的状态(正常/异常)状态
示例见:
try_finally.py
raise 语句
作用:
触发一个错误,让程序进入异常状态
语法:
raise 异常类型
或
raise 异常对象
示例见:
raise.py
练习:
写一个函数get_age() 用来获取一个人的年龄信息
此函数规定用户只能输入1~140之间的整数。如果用户输入其它的数则直接触发 ValueError类型的错误!
def get_age():
....
try:
age = get_age()
print("用户输入的年龄是:", age)
except ValueError as err:
print("用户输入的不是1~140的整数!!,获取年龄失败")
assert 语句(断言语句)
语法:
assert 真值表达式, 错误数据(通常是字符串)
作用:
当真值表达式为False时,用错误数据创建一个 AssertionError 类型的错误,并进入异常状态
等同于:
if 真值表达式 == False:
raise AssertionError(错误数据)
示例见:
get_score.py
异常小结:
语句:
try-except
捕获异常,偿试接收异常通知
try-finally
执行一定要执行的语句
raise
发送异常通知,将程序转为异常状态(进入异常流程)
assert
根据条件来触发AssertionError类型的异常
with 语句(以后再学)
为什么要用异常处理机制
在程序调用层数较深时,向主调函数传递错误信息需要层层return返回比较麻烦,所以用异常处理机制来解决此类问题
示例见:
exception_sample.py