繁体   English   中英

exec() 用于多行字符串

[英]exec() for multi-line string

这有效:

s = "for x in range(5):" \
    "print(x)"
exec(s)

如何将if语句添加到该动态代码中,例如:

s = "for x in range(5):" \
    "if x>2:" \
    "print(x)"
exec(s)

上面给出了错误:

...
for x in range(5):if x > 2:print(x)
                   ^
SyntaxError: invalid syntax

问题是字符串中的代码缺乏适当的缩进。 一个简单的方法是将正确格式化的代码包含在三引号字符串中。

s = """
for x in range(5):
    if x>2:
        print(x)
"""
exec(s)
s = "for x in range(5):\n\t" \
    "if x > 2:\n\t\t" \
    "print(x)"
exec(s)

这将解决您的问题。 出现错误的原因是忽略了 python 缩进规则,因此您需要使用\t处理它们。

请注意, \只是 python 允许在“新行”处以视觉方式继续相同声明的方式。 所以在实践中,

s = "for x in range(5):" \
    "if x>2:" \
    "print(x)"

等于

s = "for x in range(5):if x>2:print(x)"

您将需要添加实际的换行符和制表符以使语法有效,例如:

s = "for x in range(5):\n\tif x>2:\n\t\tprint(x)"

请注意,如果将\与上述内容结合起来,并将\t与空格交换,则可以使其更具可读性,从而导致:

s = "for x in range(5):" \
    "\n if x>2:" \
    "\n  print(x)"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM