python中异常处理总结

什么是错误呢?
错误是指由于逻辑或语法等导致一个程序无法正常执行的问题。
什么是异常呢?
异常是程序出错时标识的一种状态。
当异常发生时,程序不会再向下执行,而转去调用此函数的地方待处理此错误并恢复为正常状态。
作用:
用作信号,通知上层调用者有错误产生需要处理。

以下介绍四种关于异常处理的语句

为什么要用异常处理机制呢?
在程序调用层数较深时,向主调函数传递错误信息需要层层return 返回比较麻烦,所以用异常处理机制。

一.try-except语句
语法:

try:
    可能触发异常的语法
except 错误类型1 [as 变量1]:
    异常处理语句1
except 错误类型2 [as 变量2]:
    异常处理语句2
except (错误类型3,错误类型4):
    异常处理语句3
  ....

示例代码如下:

def div_apple(n):
    print("%d个苹果您想分给几个人?" % n)
    s = input('请输入人数: ')
    cnt = int(s)  # <<- 可能触发ValueError错误进入异常
    result = n / cnt  # <<-- 可能触ZeroDivisionError错误
    print("每个人分了", result, '个苹果')


try:
    div_apple(10)
    print("分苹果完成")
except ValueError:
    print("在try的内部语句中发生了值错误,已处理并转为正常状态")
except ZeroDivisionError:
    print('输入人数为零,分苹果失败!')

print("程序正常退出")

作用:
尝试捕获异常(接收异常通知),将程序转为正常状态并继续执行。
语法说明:
as 子句是用于绑定错误对象的变量,可以省略。
except 子句可以有一个或多个,但至少要有一个。

二.try-finally语句
语法:

try:
    可能触发异常的语句
finally:
    最终语句

示例代码如下:

def fry_egg():
    print("打开天燃气...")
    try:
        count = int(input("请输入鸡蛋个数: "))
        print("完成煎鸡蛋,共煎了%d个鸡蛋!" % count)
    finally:
        print('关闭天燃气')

try:
    fry_egg()
except:
    print("程序出现过异常,已转为正常状态")

print("程序正常退出")

作用:
通常用try-finally语句来做触发异常时必须要处理的事情,无论异常是否发生,finally子句都会被执行try-finally 语句不会改变程序的(正常/异常状态)。
说明:
finally 子句不可以省略,一定不存在except子句。

三.raise语句
语句:

raise 异常类型
或
raise 异常对象
或
raise  # 重新触发上一次异常

示例代码如下:

def make_except():
    print("开始_make_except")
    raise ValueError("我的一个值错误!")
    print("结束....")

def get_except():
    try:
        make_except()
    except ValueError as err:
        print("错误的值是:", err)
        raise  # 重新触发刚收到的错误 等同于raise err

try:
    get_except()
except ValueError as err:
    print("get_except内部发生值错误!", err)

print("程序结束")

作用:
触发一个错误,让程序进入异常状态,发送错误通知给调用者。

四.assert 语句(断言语句)
语法:

assert 真值表达式, 错误数据(通常是字符串)

示例代码如下:

# 此示例示意assert语句的用法
def get_score():
    s = int(input("请输入学生成绩(0~100):"))
    assert 0 <= s <= 100, '成绩超出范围!!!'
    # 等同于:
    # if (0 <= s <= 100) == False:
    #     raise AssertionError('成绩超出范围!!!')
    return s


try:
    score = get_score()
    print("学生成绩为:", score)
except ValueError:
    print("用户输入数字不能转为整数...")
except AssertionError:
    print("用户输入的整数不在0~100之间...")
    

作用:
当真值表达式为False时,用错误数据创建一个AssertionError类型的错误raise出去,并进入异常状态。

马行软地易失蹄,人贪安逸易失志!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值