2016-07-29 16 views
9

Próbuję napisać mały skrypt, który zautomatyzuje niektóre elementy tablicy PHP, które muszę napisać. Powinien napisać kopię ciągu znaków code do pliku wyjściowego z różnymi polami zastępczymi wypełnionymi dla każdego dict na liście fields.Nieoczekiwane "{" w nazwie pola podczas formatowania ciągów znaków

Jednak dostaję błąd:

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

O ile mi wiadomo, nie istnieją żadne dodatkowe szelki w obu polach zamiennych lub dicts które powinny być przyczyną problemów, więc każda pomoc będzie być docenionym.

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') 

Odpowiedz

14

Trzeba podwójnym dowolnym { lub }, które nie są częścią zastępczy formatowania. Na przykład:

function admin_add_{fieldname}_field($fields) { 
    [....] 
} 

w ciągu. { i } nie są częścią elementu zastępczego.

Podwojenie tych nawiasów klamrowych wymyka im się; końcowe dane wyjściowe będą zawierały ponownie pojedyncze znaki { i }:

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; 
}} 
''' 
Powiązane problemy