使用 .format 构建表达式时出现 KeyError

yan*_*yan 2 python maya

我用来.format编辑表达式并将其添加到属性中。KeyError当我尝试执行代码时,我会得到一个:

modi_expr = """
    if (frame < 6) {
        {0}.frameExtension=6;
    }
    else if (frame > 73) {
        {0}.frameExtension=73;
    }
    else{
        {0}.frameExtension=frame;
    }
""".format('planeShape2')
Run Code Online (Sandbox Code Playgroud)

然而,如果我%按如下方式使用,虽然它有效,但它需要我编写同一个变量的 3 次。

expr_to_use = """
    if (frame < 6) {
        %s.frameExtension=6;
    }
    else if (frame > 73) {
        %s.frameExtension=73;
    }
    else{
        %s.frameExtension=frame;
    }
""" % ('planeShape2', 'planeShape2', 'planeShape2')
Run Code Online (Sandbox Code Playgroud)

如果使用%是可行的方法,有没有一种方法可以让我一次性编写它?如果没有,是否有更好的替代方法来解决这个问题?

Dev*_*ngh 5

使用{{}}转义非格式化大括号。

来自文档:https://docs.python.org/3/library/string.html#format-string-syntax

如果需要在文字中包含大括号字符,可以通过加倍:{{和 来转义}}

modi_expr = """
    if (frame < 6) {{
        {0}.frameExtension=6;
    }}
    else if (frame > 73) {{
        {0}.frameExtension=73;
    }}
    else{{
        {0}.frameExtension=frame;
    }}
""".format('planeShape2')

print(modi_expr)
Run Code Online (Sandbox Code Playgroud)

或者您也可以对 python >= 3.6 使用 f 字符串

var = 'planeShape2'

modi_expr = f"""
    if (frame < 6) {{
        {var}.frameExtension=6;
    }}
    else if (frame > 73) {{
        {var}.frameExtension=73;
    }}
    else{{
        {var}.frameExtension=frame;
    }}
"""
Run Code Online (Sandbox Code Playgroud)

输出将是

 if (frame < 6) {
        planeShape2.frameExtension=6;
    }
    else if (frame > 73) {
        planeShape2.frameExtension=73;
    }
    else{
        planeShape2.frameExtension=frame;
    }
Run Code Online (Sandbox Code Playgroud)