27.python之异常

异常

  • 就是错误
  • 异常会导致程序崩溃并停止运行
  • 异常处理:能监控并捕获到异常,对异常部位进行处理,使程序可以继续正常运行

例:

a = 1 / 0
print(a)

结果:抛出异常ZeroDivisionError,表示除数不能为0

在这里插入图片描述

语法:

try:
    <代码块1>   # 检查并被保护的业务代码
except <异常类型>:
    <代码块2>   # 代码块1出现错误后执行的代码

注:

  • try语句中发现错误后就开始进入异常处理,try中的错误语句后面的代码不会再执行了

捕获通用异常:无法确认是哪种异常时使用

用法:

try:
    <代码块>
except Exception as e:
    <异常代码块>

例:

try:
    a = 1 / 0
    # 上面的语句出现异常后,这个打印语句不会再执行了
    print('hello')
except Exception as e:
    # e是打印具体的异常信息
    print(f'出现异常:{e}')

结果:
在这里插入图片描述

捕获具体异常:确认是哪种异常时使用

用法:

try:
    <代码块>
except <具体异常类型> as e:
    <异常代码块>

例1:出现的异常与捕获异常相符

try:
    a = 1 / 0
except ZeroDivisionError as e:
    print('出现异常:除数不能为0')

结果:出现的异常与捕获的异常相符,会执行except中的语句
在这里插入图片描述

例2:出现的异常与捕获异常不符

try:
    # 这里会报错,字符串不能和数字相加
    a = '13' + 1
    
# 这里不会的是除数不能为0的异常
except ZeroDivisionError as e:
    print('出现异常:除数不能为0')

结果:捕获的异常与发送的异常不符时,会直接报错
在这里插入图片描述

捕获多个异常:

  • 捕获多个异常时,当捕获到第一个异常后,不会继续往下捕获

方式一:可以有多个except

try:
    <代码块>
except <具体异常类型> as e:
    <异常代码块>
except Exception as e:
    <异常代码块>

方式二:使用元组将异常类型包裹起来,,捕获到哪个抛哪种

try:
    <代码块>
except (具体异常类型,Exception) as e:
    <异常代码块>

例1:

try:
    a = '1' + 1
except ZeroDivisionError as e:
    print('出现异常:除数不能为0')
except TypeError as e:
    print('出现异常:数据类型错误')

结果:
在这里插入图片描述

例2:

try:
    a = '1' + 1
except (ZeroDivisionError, TypeError) as e:
    print(f'出现异常:{e}')

结果:
在这里插入图片描述

常见异常类型

在这里插入图片描述

finally

  • 无论是否发生异常,finally中的语句一定会执行
  • 在函数中,即使在try或者except中进行了return仍然会执行finally
  • try语法至少要含有except或finally中一个
  • 若是try和finally或者except和finally中同时触发return语句,最后实际返回的是finally中return的值

语法:

try:
    <代码块1>  # 业务代码
except:
    <代码块2>  # 发生异常后执行的代码
finally:
    <代码块3>  # 不论是否发异常都会执行的代码

注:

  • 在Python2.5之前的版本,finally是独立使用,不能与try一起,之后的版本才变成可以和try一起

例1:没有异常

def test():
    try:
        a = 1 + 1
        print('没有异常呢')
        return 'try'
    except TypeError as e:
        print('出现异常:数据类型错误')
    finally:
        print('无论是否有异常,一定会执行')
        return 'finally'

print(f'打印:{test()}')

结果:
在这里插入图片描述

例2:有异常

def test():
    try:
        a = '1' + 1
    except TypeError as e:
        print('出现异常:数据类型错误')
        return '出现异常'
    finally:
        print('无论是否有异常,一定会执行')
        # 无论try和except是否有return,最终返回的一定时finally中的return
        return 'finally'

print(f'打印:{test()}')

结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值