异常 exception(基础)

代码结果需自行验证

什么是错误?

错误是由于逻辑或语法等到安置程序无法正常执行的问题

特点:

无法预知

什么是异常

异常是程序出错时标识的一种状态,程序不再执行,转去调用此函数的地方等处理并恢复为正常状态

作用:

用作信号通知,通知上层调用者有错误产生需要处理

程序有两种状态:

正常/异常

异常处理的语句:

try 语句的两种用法:

try-except语句
	try-finally语句

try-except语句:*

try:
	可能触发异常的语句
except 错误类型1 [as 变量1]:
	异常处理语句1
except 错误类型2[ as 变量2]:
	异常处理语句2
except:  #俗称万能异常,放到最后
	异常处理语句3
...
else:
	未发生异常的语句
finally:
	最终语句

作用:

尝试捕获错误得到异常通知,将程序异常状态转换正常状态继续执行

说明

as 子句 绑定错误对象
else 绑定未发生错误是执行子句
except 捕获异常
finally

示例1:

def apple(n):
	print('%d苹果分给几个人'% n)
	s = input(‘请输入人数:’)
	count = int(s)  #在此输入a 使其发生错误
	result = n / count
	print('人均:',result)
try: #异常处理
	apple(10)
	print('正常结果')
except	ValueError as err:
	# err错误原因对象
	print('异常处理结果')
	print('错误起因',err)

print('程序正常结束')

示例2:

def get_scorce():
    try:
        s = int(input('输入成绩:'))
    except ValueError: 
        print('程序在此处发生值错误')
        return 0
    if 0<s<100:
        print('程序正常执行')
        return s
    return 0
print('输入的成绩:',get_scorce())

finally语句:

异常最终语句,异常是否处理都将执行子句。
try finally 语句
	语法
		try:
			可能触发的异常语句
		finally:
			最终语句
		说明:
			finally子句不可以省略
			不存在except子句
		作用:
			通常作为异常处理时必须要处理的事情,无论异常是否
			发生不改变程序状态

示例:

def egg():
    print('打开天燃气')
    try:
        count = int(input('煎蛋多少个:'))
        print('煎蛋',count,'个')    
    finally:
        print('关闭天燃气')
try:
    egg()
except ValueError as err:
    print('值错误程序返回正常状态,错误类型:',err)

raise 语句

作用:
	触发错误,进入异常并发送错误通知
语法:
	raise 异常类型
	Or
	raaise 异常类型
	Or
	raise 重新触发上一次错误

示例1:

def make_except():
    print('开始')
    #下面触发异常
    raise ValueError
    #上面是异常
    print('结束')

try:
    make_except()
except ValueError:
    print('在此捕获触发的错误')
print('程序结束!')

示例2:

def make_except():
    print('开始')
    #下面触发异常
    e = ValueError('故意发送的错误')
    raise e
    #上面是异常
    print('结束')

try:
    make_except()
except ValueError as err:
    print('在此捕获触发的错误')
    print('在此获取错误',err)
print('程序结束!')

# 触发的错误,需要和except接受的一致
# 错误类型 和错误对象 要一致

示例3:

def f1(x):
    print(x)
    e = ValueError(str(x)'F1错误在此')
    raise e

def f2(x,y):
    try:
        f1(x)
    except ValueError as err:
        print('在此捕获F1错误',err)
        raise
    print(x,y)

try:
    f2(0,100)
except ValueError as err:
    print('在此捕获F2错误',err)

示例4:

def get_age():
    age = int(input('1-140:'))
    if age<1 or age > 140:
       raise ValueError('输入不一致:')
    return age

try:
    age = get_age()
    print('输入的年龄是:',age)
except ValueError as err:
    print(err,'获取用户失败')

assert 语句(断言语句)

语法:
	assert 真值表达式,错误数据(通常是字符串)
作用:
	当真值表达式为false时,用错误数据创建一个AssertError进入异常状态,故意制造错误。
等同于:
	if bool(真值表达式) == false:
		false AssertError(错误数据)

示例:

def get_aource():
    s = int(input('输入成绩:'))
    assert 0<=s<=100,'成绩超出范围'
    return s

source = get_aource()
print('学生成绩:',source)

异常中的小结:

try - except 语句
	用于捕获接收异常
trt - finally 语句
	用于执行任何状态都必须执行
raise 语句
	触发错误,进入异常
aassert 语句
	根据条件触发 AssertError 异常通知

Python3中全部错误类型

点此查看错误类型集合

点此查看错误和异常处理