使用.format构造表达式时的KeyError

时间:2019-06-13 20:07:43

标签: 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')

如果我按如下方式使用%,尽管它可以工作,但它要求我写3次相同的变量。

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

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

1 个答案:

答案 0 :(得分:4)

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

从文档中: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)

或者您也可以将f字符串用于python> = 3.6

var = 'planeShape2'

modi_expr = f"""
    if (frame < 6) {{
        {var}.frameExtension=6;
    }}
    else if (frame > 73) {{
        {var}.frameExtension=73;
    }}
    else{{
        {var}.frameExtension=frame;
    }}
"""

输出将为

 if (frame < 6) {
        planeShape2.frameExtension=6;
    }
    else if (frame > 73) {
        planeShape2.frameExtension=73;
    }
    else{
        planeShape2.frameExtension=frame;
    }