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

然而,我得到了一个错误:

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

据我所知,在替换字段或dicts中都没有额外的大括号会导致问题,因此如果您有任何帮助,我们将不胜感激.

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 ) {{
    [....]
}}

把那些curl 的牙套叠起来,它们就逃脱了;最终输出将再次包含单个{}个字符.

在您使用的完整字符串中,应该是:

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-3.x相关问答推荐

总结基于条件的值,如果不匹配则保留当前值

将字典列表展平为数据框列

非拉丁字符的Python正则表达式不起作用

运行 pip install -r requirements.txt 时出错

当 Python “None or True”返回 True 时,为什么 pandas “None | True”返回 False?

逗号分隔列表的 argparse 操作或类型

在带有 M1 芯片(基于 ARM 的 Apple Silicon)的 Mac 上安装较早版本的 Python(3.8 之前)失败

python中奇怪的作用域行为

调试 Numpy VisibleDeprecationWarning(来自参差不齐的嵌套序列的 ndarray)

python3:字节与字节数组,并转换为字符串和从字符串转换

Python 多行 with 语句

使用大括号抑制解包列表的 f 字符串语法

是什么导致 [*a] 过度分配?

如何用decorator 绕过python函数定义?

安装 PyTorch 1.4 的问题 - “没有找到与 torch===1.4.0 匹配的发行版”

有没有办法从 dict 和 collections.abc.MutableMapping 一起继承?

如何修复 AttributeError:部分初始化的模块?

= (equal) 在表达式大括号内的 f 字符串中做什么?

替换 tensorflow v2 的占位符

更新错误“模块”对象不可调用后 pip 不再工作