Python异常捕获(第十四讲)

在这里插入图片描述

1.异常

1.异常的介绍

    当程序无法正常执行的时候,Python就会抛出异常。这个异常会影响程序的执行,会令程序终止。
    异常也是Python的对象,表示错误。

2.异常的捕获

    当Python的脚本有发生异常的可能时,便需要捕获它,避免程序的终止。

3.语法

try:
    正常程序执行此块代码
except:
    抛出错误执行此代码块

    例如这样

try:
    li = [1, 2, 3, 4]
    li[4]
except:
    print('异常捕获')
    # 异常捕获

    练习
• 将以下代码进行异常捕获
• 当代码异常时,将ipt赋值为1

ipt = input("请输入:")
ipt = float(ipt)
print(ipt)

    代码如下:

try:
    ipt = input("请输入:")
    ipt = float(ipt)
    print(ipt)
except:
    ipt = 1
    print(ipt)

4.异常类型捕获

    但是仅仅使用以上异常捕获,虽然不会报错终止程序。但是无法记录下具体异常种类。如需记录下具体异常种类,则需要捕获该具体异常。

5.语法

try:
    pass
except 当前异常对象 as e:  # e = 当前异常对象 
    print(e)   	

    练习

  • 捕获以下代码的异常类型并输出
li = [1, 2, 3]
li[3]  # IndexError

    代码如下

try:
    li = [1, 2, 3]
    li[3]  # IndexError
except IndexError as e:
    print(e)
    # list index out of range

    需要注意的是,该捕获方式仅能捕获IndexError这一类异常。那么实际上,这种细分的异常种类有很多,可以通过其共同父类Exception捕获输出。

try:
    li = [1, 2, 3]
    li[3]  # IndexError
except Exception as e:
    print(e)
    # list index out of range

    但我们并不建议这么做,因为这项功能多数用于系统日志中,我们需要分类异常的时候,还是精确到异常种类的好。

    但我们需要知道自己的程序有没有执行成功也可以用这个语法:try-except-else

try:
    pass
except Exception as e:
    print(e)
else:
    pass

    try-except-else
• 如果抛出异常执行except内部代码
• 如果程序正常执行else内部代码

try:
    li = [1, 2, 3, 4]
    li[3]
except IndexError as e:
    print(e)
else:
    print('执行成功') # 执行成功

    最终执行的代码:try-finally

  • 不管程序有无发生异常,都将执行finally内部代码。
try:
    li = [1, 2, 3 ,4]
    li[4]
except IndexError as e:
    print(e) # list index out of range
finally:
    print('无论程序执行成功与否,都将执行') 
    # 无论程序执行成功与否,都将执行

6.主动触发异常

    在实际开发中,在程序不满足某条件时,通常会主动抛出异常。也就是说我们可以给程序设定一个条件,当程序不满足我们设定的条件时,我们就可以主动触发异常终止程序。
    语法:raise Exception()
    练习:判断煎饼熟了没,当烹饪时间小于5时,则主动触发没熟异常;否则熟了。

def lieve(t):
    if t < 5:
        raise Exception('没熟')
try:
    lieve(5)
except Exception as e:
    print(e)
else:
    print('熟了')

7.自定义异常

    当需要自定义满足一些规则时,就可以自定义异常。
    自定义异常通过创建一个新的异常类,自定义名字与内容,并且需要继承Exception类实现。

class Y(Exception):
    def __init__(self, a):
        self.a = a
    def __str__(self):
        return self.a
try:
    raise Y('主动触发异常')
except Y as e:
    print(e) # 主动触发异常

8.断言

    assert断言用于判断一个表达式,当表达式条件为False时触发断言异常AssertionError。

# assert 断言
assert '2' == 2 # AssertionError

    注意: 断言用于强制用户服从,可捕获,但是一般不捕获。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值