在运行时在python中运行动态多行代码字符串

我如何从python内部运行多行代码字符串,此外该字符串在运行时生成并存储在字符串或数组中。

背景

  • 我有一个功能,可以动态生成大量的随机代码片段。
  • 我希望将此代码传递给变量/字符串并评估语法/返回代码。
  • 无法从文件/ api请求等导入代码,因为重点是高吞吐量和速度。

# my function returns random code snippets
myCode = myRandomCodeGenerator()

# I wish to perform some in fight validation (ideally RC or syntax)
someTestingFunction(myCode)

到目前为止我的尝试

我已经看到了以下解决方案,但是由于我的代码是动态生成的,因此格式设置存在问题。我尝试生成\ n和\ r或在字符串中添加“”,以弥补运气。

code = """
def multiply(x,y):
    return x*y

print('Multiply of 2 and 3 is: ',multiply(2,3))
"""

exec(code)

I have also tried using the call function on a string yields similar formatting issues.

到目前为止,我所能做的最好的事情是执行逐行语法检查,并一次将其输入一行,如下所示。

import codeop
def is_valid_code(line):
    try:
        codeop.compile_command(line)
    except SyntaxError:
        return False
    else:
        return True

我怀疑可能有一些语法技巧可以用来保留缩进和返回的格式。我也意识到在运行时生成动态代码的风险,并在函数中过滤了允许的术语。

评论