Python中的run()函数与exec()函数的区别
发布时间:2023-12-23 00:18:44
在Python中,run()函数和exec()函数都用于执行一段动态生成的代码,但它们之间有一些关键的区别。
1. run()函数是在一个全局命名空间中执行代码,而exec()函数则在当前命名空间中执行代码。这意味着,在使用run()函数时,代码生成的全局变量和函数在执行之后仍然可用,而使用exec()函数时,生成的变量和函数只能在当前命名空间中使用。
下面的示例演示了这种区别:
code = """
def foo():
return "Hello, World!"
"""
# 使用run()函数
exec_globals = {}
exec(code, exec_globals)
print(exec_globals)
# 输出:{'foo': <function foo at 0x000001>}
# 使用exec()函数
exec_locals = {}
exec(code, exec_locals)
print(exec_locals)
# 输出:{'foo': <function foo at 0x000002>}
2. run()函数是一个简化的函数调用,它自动处理了异常和返回结果。而exec()函数仅仅是执行代码,不会捕获和处理异常。因此,如果代码中存在异常,exec()函数会导致程序中断。
下面的示例演示了这种区别:
code = """
10 / 0
"""
# 使用run()函数
try:
exec(compile(code, '<string>', 'exec'))
except ZeroDivisionError as e:
print("Caught exception:", e)
# 输出:Caught exception: division by zero
# 使用exec()函数
exec(code)
# 输出:ZeroDivisionError: division by zero
综上所述,run()函数和exec()函数在Python中的区别主要是在命名空间的范围和异常处理方面。根据具体需求选择使用合适的函数。
