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

时间:2015-12-11 01:48:46

标签: python string conditional execution

我想编写一个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子句所需的格式。

某些背景信息:

我正在关注这本书&#34;理解计算&#34;汤姆斯图尔特。其中一部分是了解编程语言的工作原理。因此,他提供了实施玩具语言的示例代码&#39; SIMPLE&#39;。他在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

2 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:2)

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

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

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