Python中exec执行字符串代码后无法识别funA函数的问题
问题分析与解决
你遇到的问题是因为exec在类方法的局部作用域中执行时,定义的函数没有被正确添加到当前可直接访问的命名空间里,即使你预期它应该存在。
解决方法
方法1:指定exec使用全局命名空间
修改exec调用,显式传入globals()作为命名空间,这样定义的funA会被放到全局作用域,就能直接调用:
exec(self.funAString, globals()) print("Dir ", dir()) # 现在应该能看到funA了 x = funA(dataset)
方法2:自定义局部命名空间并提取函数
如果不想污染全局作用域,可以创建一个字典来存储exec执行后的变量,再从中取出funA:
local_scope = {} exec(self.funAString, globals(), local_scope) funA = local_scope['funA'] x = funA(dataset)
原因说明
在Python的类方法内部,局部作用域的变量管理有特殊机制,直接使用不带命名空间参数的exec时,定义的函数不会被自动加入当前方法的局部变量列表,导致后续调用时找不到该名称。显式指定命名空间可以绕过这个限制,确保函数被正确存储和访问。
内容的提问来源于stack exchange,提问作者Polo
相关产品推荐
相关产品推荐

