什么是错误:
指由于逻辑或语法等原因,程序无法正常执行
错误的特点:
有些错误无法预知
什么是异常:
异常是程序出错时标识的一种状态
当异常发生时,程序不会再向下执行,而转去调用函数地方待处理此错误并恢复为正常状态
作用:
通知上层调用有错误产生需要处理,用异常作为信号通知调用者
try语句语法:
1.try-except 语句
2.try-finally 语句
try:
"可能触发异常的语句"
except "错误类型1":
"异常处理语句1"
except "错误类型2":
"异常处理语句2"
except:
"其它异常处理语句"
else:
"末发生异常语句"
finally:
"不管是否发生异常,最终都会执行"
"""
try-except执行流程:
1) 当try内的语句无错误时,执行正常流程,然后执行else子句和finally子句
2) 当try内的语句有异常发生时,所有正常流程终止,转去寻找包含此语句的try中的except部分。如果类型匹配则转为正常流程,否则异常状态会向上层传递
3) 无论是否有异常发生,finally子句永远会执行
"""
作用:
捕获异常,将程序转为正常流程
def div_apple(n):
print( n / 0)
try:
div_apple(10)
except ZeroDivisionError as err:
print("发生了值错误!已变为正常状态")
finally:
print("try语句结束,无论是否有异常,此语句一定执行")
try-except语法说明:
1.as子句用于绑定错误对象的变量,可以省略
2.except 子句可以有一个或者多个,但至少有一个
3.else子句最多只能有一个,也可以省略不写
4.finally子句最多只能有一个,也可以省略不写
Python常用的错误类型:
ZeroDivisionError 除(取模)零
StopIteration 迭代器没有更多的值
ImportError 导入模块对象失败
GeneratorExit 生成器发生异常通知退出
IndexError 序列中没有此索引
IndentationError 缩进错误
ValueError 传入无效参数
NameError 未声明/初始化对象
AttributeError 对象没有这个属性
AssertionError 断言语句失败
IOError 输入/输出操作失败
raise语句:
作用:
生成一个错误,让程序进入异常状态。
语法:
raise 异常类型 或 raise 异常对象
def make_except():
print("开始制造异常")
# raise ValueError
raise ValueError("值错误")
print("结束制造异常")
assert语句(断言语句)
语法:
assert 真值表达式, 错误数据(通常是字符串)
作用:
当真值表达式为False时,用错误数据创建一个AssertionError类型的错误,并进入异常状态
等同于:
if not 真值表达式:
raise AssertionError(错误数据)
def get_score():
s = int(input("请输入学生成绩:"))
assert 0 <= s <= 100, "成绩超出范围!"
# 等同于如下语句
# if not (0 <= s <= 100):
# raise AssertionError("成绩超出范围!")
return s