Python内置异常

2025年4月17日 | 阅读7分钟

在 Python 中,每个实例都必须属于一个继承自 BaseException 的类。即使它们的名称相同,两个不通过子类化连接的异常类也永远不会相等。解释器或内置方法可能会生成内置异常。

当出现错误时,Python 会引发许多内置异常。Python 中有许多内置异常,您可以在任何代码中随时引发和处理它们。下面列出了一些最受欢迎的内置异常:

1. BaseException

BaseException 是 Python 中所有异常的基类。它是 Python 标准库中所有其他异常类的父类。它为所有异常提供了基本框架,并作为开发自定义异常的基础。

BaseException 的一些特性和方法如下:

  • args: 引发异常时传递给异常的所有参数的元组。
  • with_traceback: _traceback 方法用于向错误添加回溯。
  • __str__: 将异常作为字符串返回的函数。

示例

代码

输出

CustomException                           Traceback ( most recent call last )
Input In [ 1 ], in < cell line  : 8>( )
      5     def __str__( self ) :
      6         return self.message
----  > 8 raise CustomException("  This is a custom exception. ")

CustomException  : This is a custom exception.

2. Exception Exception

所有 Python 异常都源自这个基本类。它是该语言所有其他内置异常的父类。如果您想设计自己的自定义异常,可以从 Exception 类派生。因此,您可以像处理内置异常一样轻松地处理自定义异常。建议所有用户定义的异常都源自此类。

示例

代码

输出

A custom exception was raised  : This is a custom exception.

3. AttributeError

当属性引用或赋值失败时,会引发此异常。当您尝试访问对象上不存在的属性或方法时,通常会发生这种情况。

示例

代码

输出

An attribute error occurred : ' MyClass  ' object has no attribute ' non_existent_attribute '

4. TypeError

当对错误类型的对象执行 Python 操作或函数时,会引发 TypeError 异常。这通常发生在您尝试使用错误参数类型调用函数,或对类型不正确的对象执行操作时。

示例

代码

输出

A type error occurred : can only concatenate str (not " int ") to str

5. ValueError

当内置方法或函数的参数类型正确但值不正确(因为没有其他异常更具体地描述这种情况)时,Python 会触发 ValueError 异常。

示例

代码

输出

A value error occurred : invalid literal for int() with base 10 : ' a '

6. KeyError

当在 Python 中使用不存在的键搜索字典时,会引发 KeyError 异常。

示例

代码

输出

A key error occurred : ' c ' 

7. IndexError

当索引超出范围时,会引发此异常。当使用超出范围的索引访问 Python 中的列表时,会引发 IndexError 异常。

示例

代码

输出

 An index error occurred : list index out of range

8. FileNotFoundError

当请求文件或目录,但指定的文件或目录不存在时,会引发此异常。当 Python 找不到应读取、访问或检索的文件时,会引发 FileNotFoundError 异常。

示例

代码

输出

A file not found error occurred: [ Errno 2 ] No such file or directory : ' myfile.txt '

9. ImportError

当 import 语句失败时,会引发此异常。当无法导入包或模块时,Python 会触发 ImportError 异常。

示例

代码

输出

An import error occurred : No module named ' nonexistent_module '

10. ArithmeticError

当算术运算(例如除以零或计算负整数的平方根)失败时,Python 的内置 ArithmeticError 异常会被触发。它是 OverflowError 和 ZeroDivisionError 等更专业的算术错误的基类。

示例

代码

输出

An arithmetic error occurred : division by zero

11. OverflowError

当算术运算的结果太大而无法表示时,Python 的内置 OverflowError 异常会被触发。当数学函数的结果超过可表示的最大整数时,会产生此异常,它是 ArithmeticError 的子类。

示例

代码

12. SyntaxError

当 Python 解释器在您的代码中遇到语法问题时,会触发内置的 SyntaxError 异常。当代码违反 Python 编程语言的语法要求时,就会发生语法错误,例如错误地使用了保留字、错误地使用了缩进或错误地使用了引号。

代码

输出

SyntaxError : invalid syntax

13. AssertionError

当 assert 语句失败时,会引发 Python 的内置异常 AssertionError。assert 语句用于验证流程继续进行必须为真的条件。如果 assert 语句中指定的条件不为真,则会引发 AssertionError 异常。

示例

代码

输出

AssertionError: x is not greater than 10

14. FloatingPointError

当涉及浮点数的运算产生不可定义或无意义的数学结果时,Python 的内置 FloatingPointError 异常会被触发。当执行除以零的操作,或者当值太大或太小而无法表示为浮点数时,可能会发生这种情况。

代码

输出

nan

15. EOFError

当遇到文件结束 (EOF) 标记且没有要读取的更多数据时,Python 的内置 EOFError 异常会被触发。在读取文件、套接字或其他输入流的内容时,可能会发生这种情况。

示例

代码

输出

EOFError : EOF when reading a line

这是一个演示如何引发和处理不同内置异常的示例:

代码

输出

An index error occurred : list index out of range
A division by zero error occurred: division by zero
A value error occurred : invalid literal for int( ) with base 10 : ' hello '

在此示例中,第一个 try 块引发了一个 IndexError 异常,该异常被 except 块捕获并处理。第二个 try 块引发了一个 ZeroDivisionError 异常,该异常也被捕获并处理。第三个 try 块引发了一个 ValueError 异常,该异常被捕获并处理。

这演示了如何在 Python 中引发和处理不同的内置异常,以及如何为每种类型的异常编写特定的异常处理程序。通过使用异常处理,您可以编写健壮的代码,能够优雅地处理错误和异常,并向用户提供有意义的错误消息。