我正在尝试编写一个小的脚本,该脚本将自动化一些我需要编写的PHP样板。它应将字符串code的副本写入输出文件,并为fields列表中的每个字典填写各种替换字段。

但是,我得到了错误:

Traceback (most recent call last):
    File "writefields.py", line 43, in <module>
        formatted = code.format(**field)
ValueError: unexpected '{' in field name

据我所知,替换字段或dict中都没有多余的花括号,这会引起问题,因此我们将不胜感激。
code = '''
// {label}
add_filter( 'submit_job_form_fields', 'frontend_add_{fieldname}_field' );
function frontend_add_{fieldname}_field($fields) {
    $fields['job']['job_{fieldname}'] = array(
        'label' => __('{label}', 'job_manager'),
        'type' => 'text',
        'required' => {required},
        'priority' => 7,
        'placeholder' => '{placeholder}'
    );
    return $fields;
}
add_filter( 'job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field' );
function admin_add_{fieldname}_field( $fields ) {
  $fields['_job_{fieldname}'] = array(
    'label'       => __( '{label}', 'job_manager' ),
    'type'        => 'text',
    'placeholder' => '{placeholder}',
    'description' => ''
  );
  return $fields;
}
'''

fields = [
    {
        'fieldname': 'salary',
        'label': 'Salary ($)',
        'required': 'true',
        'placeholder': 'e.g. 20000',
    },
    {
        'fieldname': 'test',
        'label': 'Test Field',
        'required': 'true',
        'placeholder': '',
    }
]

with open('field-out.txt', 'w') as f:
    for field in fields:
        formatted = code.format(**field)
        f.write(formatted)
        f.write('\n')

最佳答案

您需要将不属于格式占位符的任何{}加倍。例如,您有:

function admin_add_{fieldname}_field( $fields ) {
    [....]
}
在字符串中。第一行末尾的{和最后一行的}不属于占位符。将它们分别替换为{{}}:
function admin_add_{fieldname}_field( $fields ) {{
    [....]
}}
将那些花括号加倍使它们逃脱。最终输出将再次包含单个{}字符。
在您使用的完整字符串中,将为:
code = '''
// {label}
add_filter( 'submit_job_form_fields', 'frontend_add_{fieldname}_field' );
function frontend_add_{fieldname}_field($fields) {{
    $fields['job']['job_{fieldname}'] = array(
        'label' => __('{label}', 'job_manager'),
        'type' => 'text',
        'required' => {required},
        'priority' => 7,
        'placeholder' => '{placeholder}'
    );
    return $fields;
}}
add_filter( 'job_manager_job_listing_data_fields', 'admin_add_{fieldname}_field' );
function admin_add_{fieldname}_field( $fields ) {{
  $fields['_job_{fieldname}'] = array(
    'label'       => __( '{label}', 'job_manager' ),
    'type'        => 'text',
    'placeholder' => '{placeholder}',
    'description' => ''
  );
  return $fields;
}}
'''

关于python - 进行字符串格式化时,字段名称中出现意外的 '{',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38662296/

10-12 18:34
查看更多