Python手册(3) 异常处理

0. 前言

1. 内建异常类型

# 内建异常类型
# Exception
# AttributeError
# IOError
# IndexError
# KeyError
# ValueError
# NameError
# SyntaxError
# ZeroDivisionError

2. 新建异常类型

class MyException(Exception): pass
class MyException(Exception):
    def __init__(self, error_msg):
        self.error_msg = error_msg

3. 捕获异常

3.1. 基本使用

  • try:运行可能会抛出异常的代码。
  • except:该关键字有以下多种功能
    • 捕获一个或多个特定异常
    • 捕获其他所有异常
  • else:当没有出现异常时执行
  • finally:不管如何都执行
  • 其他:
    • 抛出的异常只会被一个except捕获。
def exception_handle():
    try:
        print("try")
        raise ValueError # 抛出特定异常
    except IndexError as e:
        # 捕获一个异常,并获取异常对象
        # 不对异常进行处理,继续抛出异常
        raise
    except (KeyError, ValueError) as e:
        # 捕获某两类异常,并获取异常对象
        print(e)
    except:
        # 捕获除了上述三种异常之外的所有异常
        print("except")
        raise # 抛出捕获到的异常
    else:
        # 当没有捕获异常时执行
        print("else")
    finally:
        # 不管是否捕获异常,都要执行
        print("finally")

3.2. 异常类的基类与派生类

  • 即抛出的异常为A,处理异常的类别为B:
    • 如果B是A的基类,则A异常会被正常捕获。
    • 如果A是B的基类(而不是同一类),A异常不会被捕获。
  • 下面代码的输出结果是 B C D
class B(Exception):
    pass
class C(B):
    pass
class D(C):
    pass
for cls in [B, C, D]:
    try:
        raise cls()
    except D:
        print("D")
    except C:
        print("C")
    except B:
        print("B")
  • 如果将except B放到最前面,则输出的结果为B B B
class B(Exception):
    pass~~ 

class C(B):
    pass

class D(C):
    pass

for cls in [B, C, D]:
    try:
        raise cls()
    except B:
        print("B")
    except D:
        print("D")
    except C:
        print("C")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值