Python 运行时错误通常会在代码执行过程中因为各种问题(如语法错误、类型错误、索引错误等)而抛出。这里我将列出 17 个常见的 Python 运行时错误,并给出每个错误的简单示例代码:
-
NameError - 尝试访问一个未定义的变量。
print(x) # x 未定义
-
TypeError - 尝试将函数应用于不适当类型的对象。
print(1 + 'a') # 尝试将整数和字符串相加
-
ZeroDivisionError - 尝试除以零。
result = 1 / 0
-
IndexError - 尝试访问列表、元组或字符串中不存在的索引。
my_list = [1, 2, 3] print(my_list[3]) # 索引 3 不存在
-
KeyError - 尝试访问字典中不存在的键。
my_dict = {'a': 1} print(my_dict['b']) # 键 'b' 不存在
-
AttributeError - 尝试访问对象的属性或方法,但该对象没有该属性或方法。
class MyClass: pass obj = MyClass() print(obj.my_attribute) # MyClass 没有 my_attribute 属性
-
SyntaxError - 语法错误,通常不是运行时错误,但容易混淆。
if x = 5: # 应为 == print("x is 5")
-
ValueError - 传入函数的参数类型正确但值不合适(如超出范围)。
num = int(input("Enter a number: ")) print(num ** num) if num < 0 else print("Number must be non-negative")
-
IndentationError - 缩进错误,也是语法错误的一种,但常与运行时错误混淆。
def my_function(): print("Hello") # 缺少缩进
-
UnboundLocalError - 尝试访问一个局部变量,但在使用它之前已将其标记为局部变量(即尝试在变量赋值前使用它)。
x = 1 def my_func(): print(x) x = 2 my_func()
-
RecursionError - 递归调用深度过大导致栈溢出。
def recursion(): recursion() recursion()
-
ImportError - 尝试导入不存在的模块或包。
import non_existent_module
-
FileNotFoundError - 尝试打开不存在的文件。
with open('non_existent_file.txt', 'r') as f: print(f.read())
-
PermissionError - 尝试执行没有权限的操作(如写入受保护的文件)。
with open('/etc/passwd', 'w') as f: # 假设没有足够的权限 f.write("test")
-
KeyError(再次提及,因为很常见)- 字典键不存在。
my_dict = {'a': 1} print(my_dict.get('b')) # 使用 get() 可以避免 KeyError,但这里为了示例仍使用索引方式
-
NotImplementedError - 当一个类实现了某个接口,但方法未具体实现时抛出。
class MyInterface: def my_method(self): raise NotImplementedError obj = MyInterface() obj.my_method()
-
MemoryError - 程序试图使用超过可用内存的资源时抛出。
# 这通常不会直接通过简单代码触发,但可以通过大型数据处理或递归深度过深间接导致
请注意,SyntaxError
和 IndentationError
实际上是在代码解析时(而非运行时)发生的,但它们经常与运行时错误混淆,因此我也在这里列出了它们。