欢迎各位兄弟 发布技术文章
这里的技术是共享的
python Exception 与 Error 的区别
在 Python 中,Exception 和 Error 这两个术语都与异常处理相关,但它们有不同的含义和用法。以下是它们之间的主要区别:
定义:Exception 是 Python 中的一个基类,表示程序中发生的一般异常。它是所有可以被捕获的异常的基类。
用途:使用 Exception 可以捕获大部分异常情况,但不包括系统退出、键盘中断以及某些系统错误。
类型:它可以有许多子类。你可以创建自己的异常类,并使其继承 Exception。
示例:
pythontry: # 可能引发的异常 num = int(input("请输入一个整数:")) except Exception as e: print(f"发生异常:{e}")
定义:Error 通常指的是更加严重的错误,通常与程序无法继续运行的情况相关。在 Python 中,有一个专门的 BaseException 类,其中 SystemExit 和 KeyboardInterrupt 都是其子类,并且 Error 类是一般性错误的一个广泛分类。
用途:它通常指代不应该被捕获的严重错误,比如内存溢出、栈溢出等。虽然在 Python 中 Error 本身并不是一个直接的类(没有名为 Error 的内置类),但许多标准库中的异常类会以 Error 结尾,如 IOError、RuntimeError等。
示例:
pythontry: # 这里意图引发一个用以示范的错误 x = 1 / 0 # 这是一个 ZeroDivisionError except ZeroDivisionError: print("发生除以零错误!")
Exception 是所有可捕获异常的基类,通常用于处理程序中的问题。
Error 指的是更为严重的错误,通常与程序运行失败有关。并不是一个直接的类别,但是许多错误类会以 Error 结尾。
捕获自定义异常的例子:
pythonclass MyCustomError(Exception): pass try: raise MyCustomError("这是一个自定义异常!") except MyCustomError as e: print(f"捕获到自定义异常:{e}")
识别不同异常的例子:
pythontry: 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 的类 ),但它作为所有标准异常的基类,包含了许多常见的异常类型。让我们来详细解释一下:
BaseException:
所有异常类的基类,包括 Exception 和其他一些异常类型,如 SystemExit、KeyboardInterrupt 等。
BaseException 包含的异常通常用于比较底层的情况以及信号控制。
Exception:
Exception 是 BaseException 的子类,是所有常规、可捕获异常的基类。
大多数用于编程逻辑或运行时错误的异常类都是从 Exception 类派生的,诸如 ValueError、TypeError、IOError、ZeroDivisionError 等。
当我们使用 try 和 except 语句捕获异常时,通常是捕获从 Exception 派生的实例。
Error:
在 Python 的标准异常中,许多具体的异常类以 Error 结尾,如 IOError、RuntimeError 等,都是 Exception 的子类。
“Error” 这一术语在 Python 中并不是一个直接的类别,而是一种用于命名的惯例,表明这是一个更特定的错误情况。
下面是一个简单的层次结构图:
BaseException
└── Exception
├── TypeError
├── ValueError
├── IOError
├── RuntimeError
└── ...
Exception 是 BaseException 的子类,而不是 Error 的基类。
许多"错误"类(如 RuntimeError, IOError)都是从 Exception 类派生的。
通过这种结构,Python 实现了明显的异常层次,有助于分类和处理不同类型的问题。捕获异常时,通常会使用 except Exception: 来处理大多数的可捕获异常,而不捕获 BaseException 下的系统级别的异常。