将字符串转换为有效的函数 - exec与否

时间:2014-04-15 18:10:51

标签: python

我有函数定义的字符串格式,如何将其转换为有效函数。

我了解到我可以使用exec命令使其工作,但感觉我正在运行一个有错误的代码。

msg = """
def myfunction(input):
    output = input.upper()
    return output"""
exec(msg)
print myfunction('hello World')

显然,上面的代码会运行,因为我可以运行并看到输出:HELLO WORLD,但是当我在IDE(Eclipse / Pydev)中编写代码时,它显示出恼人的错误。

enter image description here

我想知道这是(exec)创建函数的正确方法,如果你必须根据字符串创建它吗? 或者有一些更通用和更好的方法来做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:3)

使用imp module怎么样?{{3}}应该更通用,更不容易出错?

import imp

# create a new module
module = imp.new_module("myModule")

msg = """
def myfunction(input):
        output = input.upper()
        return output"""

# import code into myModule
exec msg in module.__dict__

print module.myfunction("test")

答案 1 :(得分:2)

没有错。您的IDE只是无法检测到您在运行时创建的内容。如果您正计划在生产中使用该功能,则还应检查this