异常处理

异常处理

错误与异常

  • 错误:程序运行前的语法问题,如:关键字、缩进、括号不成对等

  • 异常:在程序运行过程中出现的错误,如:变量未定义、除数为0、属性不存在等

异常处理

  • 说明:异常处理可以认为是一种特殊的流程控制语句,可以提高代码的健壮性。

  • 语法:try-except

    try:
        print('正常执行')
        # print(a)
        print(3/0)
    except Exception as e:
        # Exception是所有异常的基类,因此此处可以捕获所有异常
        print('出现异常,进行处理')
        print(e)
    ​
    print('其他代码')
  • 捕获多个异常:

    try:
        # print(a)
        # print(3/0)
        fp = open('123.txt')
    except NameError as e:
        print('NameError:', e)
    except ZeroDivisionError as e:
        print('ZeroDivisionError:', e)
    except Exception as e:
        print('other:', e)

    也可以对多种异常进行分组处理:

    try:
        # print(a)
        # print(3/0)
        fp = open('123.txt')
    except (NameError, ZeroDivisionError) as e:
        # 将特定的某些异常统一处理,写到元组中即可
        print(e)
    except:
        print('其他异常')
  • else和finally

    try:
        print('正常执行')
        print(a)
    except:
        print('出现异常')
    else:
        # 出现异常就不执行了
        print('正常结束')
    finally:
        # 无论有误异常都会执行
        print('无论如何都执行')

    else:在没有异常的时候回执行,出现异常就不执行了

    finally:无论是否有异常,都会执行

  • 抛出异常:raise

    try:
        print('开始')
        # 根据代码逻辑的需要,手动抛出特定的异常
        raise Exception('手动抛出异常')
        print('一切正常')
    except Exception as e:
        print('出现异常:', e)
    ​
    print('结束')
  • 异常嵌套:try-except结构中嵌套try-except结构

    print('我要去上班,什么事情都不能阻止我上班的脚步')
    try:
        print('我准备骑电动车')
        raise Exception('昨天晚上那个缺德的家伙把我充电器给拔了,无法骑车')
        print('骑电动车提前到达公司')
    except Exception as e:
        print(e)
        try:
            print('我准备坐公交')
            raise Exception('等了20分钟一直没有公交车,果断放弃')
            print('坐公交准时到达公司')
        except Exception as e:
            print(e)
            print('我准备打车')
            print('打车还是快,一会就到公司了')
    ​
    print('热情满满的开始一天的工作')
  • 自定义异常类:继承自异常的基类(Exception)

    # 自定义异常类,名字通常以Exception结尾
    class MyException(Exception):
        def __init__(self, msg):
            self.msg = msg
    ​
        def __str__(self):
            # repr键变量转换成字符串,若本身是字符串则不必要
            # return repr(self.msg)
            return self.msg
    ​
        def deal(self):
            print('异常已处理')
    ​
    try:
        print('正常执行')
        raise MyException('手动抛出定义异常')
    except MyException as e:
        print(e)
        e.deal()
  • 特殊使用

    • 场景:做文件操作时,中间无论读写,也无论有误异常,最终一定要把文件关闭

    • with:使用with,不必再关系文件的关闭问题,with语句块结束后一定会确保文件关闭

    # fp = open('test.txt', 'rb')
    # # 各种读写操作
    # fp.close()# 使用with,无需关心文件的关闭问题
    with open('test.txt', 'rb') as fp:
        content = fp.read(5)
        print(content)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值