欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

python Exception 与 Error 的区别 AG chatgpt 有大用 有大大用

python Exception 与 Error 的区别


在 Python 中,Exception 和 Error 这两个术语都与异常处理相关,但它们有不同的含义和用法。以下是它们之间的主要区别:

1. Exception

  • 定义Exception 是 Python 中的一个基类,表示程序中发生的一般异常。它是所有可以被捕获的异常的基类。

  • 用途:使用 Exception 可以捕获大部分异常情况,但不包括系统退出、键盘中断以及某些系统错误。

  • 类型:它可以有许多子类。你可以创建自己的异常类,并使其继承 Exception

  • 示例

    python
    try:
        # 可能引发的异常
        num = int(input("请输入一个整数:"))
    except Exception as e:
        print(f"发生异常:{e}")

2. Error

  • 定义Error 通常指的是更加严重的错误,通常与程序无法继续运行的情况相关。在 Python 中,有一个专门的 BaseException 类,其中 SystemExit 和 KeyboardInterrupt 都是其子类,并且 Error 类是一般性错误的一个广泛分类。

  • 用途:它通常指代不应该被捕获的严重错误,比如内存溢出、栈溢出等。虽然在 Python 中 Error 本身并不是一个直接的类(没有名为 Error 的内置类),但许多标准库中的异常类会以 Error 结尾,如 IOErrorRuntimeError等。

  • 示例

    python
    try:
        # 这里意图引发一个用以示范的错误
        x = 1 / 0  # 这是一个 ZeroDivisionError
    except ZeroDivisionError:
        print("发生除以零错误!")

概括

  • Exception 是所有可捕获异常的基类,通常用于处理程序中的问题。

  • Error 指的是更为严重的错误,通常与程序运行失败有关。并不是一个直接的类别,但是许多错误类会以 Error 结尾。

使用举例

  • 捕获自定义异常的例子

    python
    class MyCustomError(Exception):
        pass
    
    try:
        raise MyCustomError("这是一个自定义异常!")
    except MyCustomError as e:
        print(f"捕获到自定义异常:{e}")
  • 识别不同异常的例子

    python
    try:
        x = int("not_a_number")
    except ValueError:
        print("发生 ValueError,输入不是一个有效整数。")
    except Exception as e:
        print(f"发生其他异常:{e}")

总之,Exception 是用于捕获和处理的通用异常类型,而 Error 通常表示更严重的问题或具体的错误情况。在编写 Python 程序时使用 Exception 来处理异常是一种常见和推荐的做法。



Exception 是 Error 的基类吗?



在 Python 中,Exception 不是 Error 的基类(因为本身并没有 Error 的类 ),但它作为所有标准异常的基类,包含了许多常见的异常类型。让我们来详细解释一下:

Python 异常层次结构

  1. BaseException

  • 所有异常类的基类,包括 Exception 和其他一些异常类型,如 SystemExitKeyboardInterrupt 等。

  • BaseException 包含的异常通常用于比较底层的情况以及信号控制。

  • Exception

    • Exception 是 BaseException 的子类,是所有常规、可捕获异常的基类。

    • 大多数用于编程逻辑或运行时错误的异常类都是从 Exception 类派生的,诸如 ValueErrorTypeErrorIOErrorZeroDivisionError 等。

    • 当我们使用 try 和 except 语句捕获异常时,通常是捕获从 Exception 派生的实例。

  • Error

    • 在 Python 的标准异常中,许多具体的异常类以 Error 结尾,如 IOErrorRuntimeError 等,都是 Exception 的子类。

    • “Error” 这一术语在 Python 中并不是一个直接的类别,而是一种用于命名的惯例,表明这是一个更特定的错误情况。

    示例层次结构

    下面是一个简单的层次结构图:

    BaseException
        └── Exception
            ├── TypeError
            ├── ValueError
            ├── IOError
            ├── RuntimeError
            └── ...
    

    总结

    • Exception 是 BaseException 的子类,而不是 Error 的基类。

    • 许多"错误"类(如 RuntimeErrorIOError)都是从 Exception 类派生的

    通过这种结构,Python 实现了明显的异常层次,有助于分类和处理不同类型的问题。捕获异常时,通常会使用 except Exception: 来处理大多数的可捕获异常,而不捕获 BaseException 下的系统级别的异常。



    普通分类: