其他例外类型

例外类型
说明
代码范例
错误讯息(可能显示)
ValueError 当函数接收到正确型别但不适当的值时抛出。 int("abc") ValueError: invalid literal for int() with base 10
TypeError 当操作或函数应用于不支援的资料型别时抛出。 1 + "a" TypeError: unsupported operand type(s) for +
IndexError 当试图存取串列中不存在的索引时抛出。 [1, 2, 3][3] IndexError: list index out of range
KeyError 当试图存取字典中不存在的键时抛出。 {"a": 1}["b"] KeyError: \'b\'
AttributeError 当属性引用或方法应用于不支援的对象时抛出。 "hello".non_existent_method() AttributeError: \'str\' object has no attribute
NameError 当引用尚未定义的变数或函数时抛出。 print(unknown_var) NameError: name \'unknown_var\' is not defined
ZeroDivisionError 当试图将数字除以零时抛出。 1 / 0 ZeroDivisionError: division by zero
FileNotFoundError 当尝试打开不存在的档案时抛出。 open("nonexistent.txt") FileNotFoundError: No such file or directory
IOError 通用的输入/输出错误。 open("nonexistent.txt") IOError: No such file or directory
ImportError 当导入模组失败或找不到模组时抛出。 import nonexistent_module ImportError: No module named \'nonexistent_module\'
RuntimeError 通用的一般错误。 raise RuntimeError("general error") RuntimeError: general error
StopIteration 用迭代器时,当无更多项目可迭代时抛出。 next(iter([])) StopIteration
IndentationError 当程式码缩排格式不正确时抛出。 def func():\\nprint("hi") (无缩排) IndentationError: expected an indented block
SyntaxError 当程式码语法错误无法执行时抛出。 print("hello (无闭合引号) SyntaxError: EOL while scanning string literal

RuntimeError

RuntimeError 是 Python 中的一种内置异常类型。它表示在程式执行期间发生的一般错误或异常情况。具体来说:

  • RuntimeError 是 Exception 类的子类之一。Exception 是所有内置异常类的基类。
  • RuntimeError 用于表示在程式执行过程中发生的一般错误或意外情况。这些错误通常不属于其他更具体的异常类型,例如 ValueError、TypeError 或 IndexError。
  • 当程式无法预料的情况发生时,就可以引发 RuntimeError。例如,尝试执行无效的操作、调用不存在的函数或方法、或者违反某些运行时约束条件等。
  • 在自定义异常类时,通常会继承 RuntimeError 作为基础类(base Class)。这样可以表示这个异常是由于程式运行时出现的问题而引发的。(在物件导向程式设计中,「基类」(Base Class)是指一个类别被其他类别所继承的类别。)
  • 程式可以捕获 RuntimeError 异常,并採取适当的错误处理措施,例如记录错误信息、向用户显示友好的错误讯息等。
  • 为何要使用例外处理?

    • 提高程式稳定性: 防止程式因未预期的错误而崩溃。
    • 提供友善的错误讯息: 让使用者更容易理解错误原因。
    • 实现错误恢复: 在发生错误时,程式可以尝试进行修复或採取替代措施。

    try except

    try:
    # 可能发生错误的程式码
    except ExceptionType:
    # 处理特定类型的例外

    try: 包含可能产生例外的程式码。except: 如果 try 区块中的程式码发生了指定的 ExceptionType 类型的例外,则执行 except 区块中的程式码。

    example:

    try:
    # 可能发生错误的程式码
    except ExceptionType:
    # 处理特定类型的例外

    更多用法

    多个 except 区块: 可以使用多个 except 区块来处理不同的例外类型。else 区块: 如果 try 区块中的程式码没有发生任何例外,则执行 else 区块中的程式码。finally 区块: 不论是否发生例外,finally 区块中的程式码都会执行,通常用于清理资源。

    更多用法
    多个 except 区块: 可以使用多个 except 区块来处理不同的例外类型。
    else 区块: 如果 try 区块中的程式码没有发生任何例外,则执行 else 区块中的程式码。
    finally 区块: 不论是否发生例外,finally 区块中的程式码都会执行,通常用于清理资源。