关于python3.5使用exec动态调用方法获取返回值的问题:单独执行好使,但是封装在class里就会报错?

先提问题的场景:

sa='a=1'
exec(sa)
print(a)

以上代码可执行

class tess():
    def ex(self):
        sa='a=1'
        exec(sa)
        print(a)
s=tess()
s.ex()

以上代码会报错,提示a未定义

class tess():
        def ex(self):
            a=0
            sa='a=1'
            exec(sa)
            print(a)
    s=tess()
    s.ex()

以上代码显示的仍是0,而不是1

小弟想实现的是动态拼接调用方法,获取返回值的字符串,例如,动态拼接出exec_result=D_function('para1','para2')的字符串,然后使用exec执行该语句,并取得exec_result。但是这个字符串一旦放入def就会报未定义错误。如果提前定义好exec_result,但是如果提前定义好exec_result,虽然不报错,但是仍得不到想要的返回值。请教各位大神,如何能够实现小弟想要的效果
或者,除了exec以外,是否有其他方案能够动态调用方法获取返回值的。非常感谢大家!

阅读 8.1k
1 个回答

关于exec的使用,题主可以参考另外一篇提问: https://segmentfault.com/q/10...

就目前你的问题,给你一种解决办法:

# encoding: utf-8

class tess(object):
    def __init__(self):
        self.__globals__ = {}
        self.__locals__ = self.__globals__

    def ex(self):
        sa = 'a=1'
        exec(sa, self.__globals__, self.__locals__)
        print(self.__globals__['a'])

s = tess()
s.ex()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题