生成用于执行的python代码(自动纠正""")

时间:2017-02-28 15:35:40

标签: python string exec code-generation

我编写了一个python代码生成器 作为输入,它有一个源代码:source 我需要生成的部分输出是execute(source_code)source_code是表示source的字符串时。 如果我为输入源编写"execute({0})".format(source) =" import sys" 我得到execute(import sys)。 所以我尝试了:execute(\"\"\"{0}\"\"\")format(source)。好吗?我试着测试它......有时它没关系......当源内有"""时会出现问题 例如:

from IPython.display import HTML

HTML("""
<script>
console.log("hello");
</script>
<b>HTML</b>
""")

我的代码变成了

execute("""from IPython.display import HTML
HTML("""
<script>
console.log("hello");
</script>
<b>HTML</b>
""")""")

UPD: 将代码更改为

execute('''{0}''').format(source)

没有解决问题,将遇到以下问题:

def tojson(data):
    '''Shorten the code to respond a little bit.'''
    print(json.dumps(data))

1 个答案:

答案 0 :(得分:1)

使用单个三重引号应该有所帮助:

execute('''from IPython.display import HTML
HTML("""
<script>
console.log("hello");
</script>
<b>HTML</b>
""")''')

在笔记本中运行,您需要使用eval()来实际显示 HTML

exec('''from IPython.display import HTML''')
eval('''HTML("""
<script>
console.log("hello");
</script>
<b>HTML</b>
""")''')

在你的情况下可能:

execute('''{0}''').format(source)

如果字符串中有''',也可以使用

source = """
def add(a, b):
    '''Add'''
    return a + b

print(add(1, 2))
"""

exec('''{0}'''.format(source))

输出:

3