我正在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相关问答推荐

AddMultplicationEquality() 用于多个变量

Heroku 中的未知错误代码缺少一个或多个参数

Python-Django 设置 Pandas DataFrame 的多索引不会分组/合并最后一个索引

我无法直接在 VSCode 中运行该程序,但可以使用 VScode 中的终端运行它

提取图像中的背景并保存

按字母顺序排序列表 (OrderFilter),条件是值为 '' 的条目位于列表 DRF 的末尾

移动所有列的数据帧值以使其单调递增

!date 的命令无法从 jupyter notebook 运行

根据另一个数据帧中的位置从主数据帧中提取子序列

当我判断另一个 checkButton 时,如何判断两个 python tkinter checkButtons?

使用 selenium 加速网页抓取

过滤查询集和Q运算符的不同值

`pyspark mllib` 与 `pyspark ml` 包

运行 PyCharm 测试时如何解决django.core.exceptions.ImproperlyConfigured:找不到 GDAL 库?

判断对 python 3 支持的要求

使用 Sublime Text 3 在 Python 3 中打印 UTF-8

在 Ubuntu 上为 Python3 安装 mod_wsgi

为什么 string.maketrans 在 Python 3.1 中不起作用?

每次启动 Google Colab 时都必须安装所需的软件包吗?

带有自定义标头的 urllib.urlretrieve