KeyError при использовании .format для структурирования выражения - PullRequest
2 голосов
/ 13 июня 2019

Я использую .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 Ответ

4 голосов
/ 13 июня 2019

Используйте {{ и }} для экранирования фигурных скобок.

Из документов: 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;
    }
...