BaseException是所有异常的基类,包含SystemExit、KeyboardInterrupt等控制流异常;Exception继承自BaseException,涵盖常规错误如ValueError、TypeError;默认except捕获Exception及其子类,不包括BaseException直接子类;避免捕获BaseException以防阻断程序正常退出;自定义异常应继承Exception,捕获时应指定具体类型以确保安全和符合Python设计原则。
在 Python 中,Exception 和 BaseException 都是用于异常处理的内置类,它们之间是继承关系,但用途和设计目的有明确区分。
Python 中所有异常类都直接或间接继承自 BaseException。它位于异常类层次结构的最顶层,主要用于捕获“程序执行中需要中断流程”的情况。
常见的从 BaseException 直接继承的异常包括:
这些异常不是普通错误,而是控制流的一部分,通常不应被常规代码静默捕获。
Exception 是 BaseException 的子类,绝大多数我们日常使用的异常类型都继承自 Exception,比如:
当你使用 try...except: 而不指定异常类型时,实际默认捕获的是 Exception 及其子类,不会捕获 SystemExit、KeyboardInterrupt 等 BaseException 的直接子类。
如果用 except BaseException:,会连同 SystemExit 和 KeyboardInterrupt 一起捕获,这可能导致程序无法正常退出。
例如:
try:
sys.exit("退出程序")
except BaseException:
prin
t("程序退出被拦截!") # 这会导致 exit 失效
这种写法会干扰系统正常行为,应避免。
基本上就这些。理解 Exception 和 BaseException 的区别,有助于写出更安全、更符合 Python 设计哲学的异常处理代码。