如何格式化 Python 中的字符串,使其在执行时产生有效的 if .. then .. else 语句?

How to format a string in Python that when executed produces a valid if .. then .. else statement?

我想写一个 Python 字符串,执行时会这样:

if condition:
    consequence
else:
    alternative

所以,我尝试了类似的方法:

string = 'if condition: consequence; else: alternative;'

执行:

>>> exec(string)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    exec(string)
  File "<string>", line 1
    if condition: consequence; else: alternative;
                                  ^
SyntaxError: invalid syntax

但是如您所见,我遇到了语法错误。字符串应该如何格式化?

感谢您的帮助!

PS:这个问题不是关于如何评估或执行 Python 字符串(参见 How do I execute a string containing Python code in Python?),而是关于执行 if..then 所需的格式。 .else 子句。

一些上下文:

我正在关注 Tom Stuart 的书 "understanding computation"。其中一部分是关于了解编程语言的工作原理。因此,他给出了一种玩具语言 'SIMPLE' 的示例代码。他在 Ruby 中展示了如何将 SIMPLE 转换为 Ruby 代码。但是,我正在尝试将其写在 Python 中,因为这让我更感兴趣。 Ruby 示例是:

def to_ruby 
    "-> e { if (#{condition.to_ruby}).call(e)" + 
          " then (#{consequence.to_ruby}).call(e)" + 
          " else (#{alternative.to_ruby}).call(e)" + 
          " end }"
end

您可以使用 exec 来执行 Python 语句,包括换行符:

>>> exec("if True:\n  print 'abc'\nelse:\n  print 'def'")
abc

如果使用 Python 3,打印时需要括号:

>>> exec("if True:\n  print('abc')\nelse:\n  print('def')")
abc

根据 Kevin Guan 和 Tom Karzes 的意见,我找到了以下替代问题解决方案:

>>> exec("""
if True:
    print('abc')
else:
    print('def')
""")
abc

这种格式避免了有点烦人的 \n 符号。