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