使用code.interact触发TypeError:exec() globals需为dict而非内置函数/方法
解决code.interact调用时的TypeError问题
问题场景
运行以下Python代码:
import code # ... 其他业务代码 code.interact(local=locals)
启动交互式控制台后,输入任意代码(如1+1、print("nothing works"))都会触发如下错误:
(InteractiveConsole) >>> 1+1 TypeError: exec() globals must be a dict, not builtin_function_or_method >>> print("nothing works") TypeError: exec() globals must be a dict, not builtin_function_or_method
问题原因
code.interact的local参数要求传入字典类型的变量映射,作为交互式控制台的局部命名空间。但这里直接传入了内置函数locals(未加括号调用),传入的是函数对象而非字典,导致控制台执行代码时无法正确解析命名空间,触发类型错误。
解决方法
正确调用locals()获取字典
将代码中的locals改为locals(),调用该函数获取当前环境的局部变量字典:import code # ... 其他业务代码 code.interact(local=locals())转为普通字典(针对函数内部等特殊场景)
如果在函数内部调用locals(),返回的可能是特殊的只读映射对象,此时可以将其转为普通字典确保兼容性:import code def test(): var = "test" code.interact(local=dict(locals())) test()
内容的提问来源于stack exchange,提问作者Michael B. Currie
相关产品推荐
相关产品推荐

