【问题标题】:Generate python code for execution (auto correct """)生成执行的python代码(自动更正""")
【发布时间】:2017-07-19 15:59:39
【问题描述】:

我写了一个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>
""")""")

更新: 将代码更改为

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

没有解决问题,问题会遇到:

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

【问题讨论】:

    标签: python string exec code-generation


    【解决方案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
    

    【讨论】:

    • 更改为 execute('''{0}''')format(source) 确实有效!谢谢!但是如果内部源有'''会发生什么?我会遇到同样的问题吗?
    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2015-03-30
    • 2012-05-06
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多