Дополнительно
формат строки в Python неиспользуемые именованные аргументы
Позвольте'ы сказать, что у меня:
action = '{bond}, {james} {bond}'.format(bond='bond', james='james')
этот Wil выход:
'bond, james bond'
Далее мы имеем:
action = '{bond}, {james} {bond}'.format(bond='bond')
это будет выход:
KeyError: 'james'
Есть какой-то обходной путь, чтобы предотвратить эту ошибку, чтобы произошло, что-то вроде:
- если keyrror: игнорировать, оставить его в покое (но не разбираем др.)
- сравниваем строку формата с доступными именованные аргументы, если их нет, то добавить
46
9
Если вы используете Python 3.2+, использовать можете использовать стр.format_map().
Для облигаций, облигаций:
Для облигаций, {Джеймс} облигаций:
В Python 2.6/2.7
Для облигаций, облигаций:
Для облигаций, {Джеймс} облигаций:
Вы могли бы использовать [строка] шаблон1 с
safe_substitute
метод.Вы можете следовать рекомендациям в [Пеп 3101][1] и подкласс форматирования:
Теперь попробуйте это:
Вы можете изменить ключевые ошибки помечаются на изменение текста в собственной.по умолчанию на что вы хотели бы показать на KeyErrors:
Можно также сделать простой и читаемый, хотя и несколько глупо:
Я знаю, что этот ответ требует знания ожидаемого ключи, но я ищу простой двухэтапного замещения (произнесите имя проблемы во-первых, тогда индекс задачи в цикле) и создать целый класс или нечитаемый код более сложным, чем это необходимо.
falsetru'ы ответ есть умное использование недобросовестный словарь с vformat (), и чувак'ы ответ, пожалуй, больше в линии с Python's документация, но ни обрабатывать сложные имена полей (например, с помощью явного преобразования (
!р
) или формат спецификации (:+10г
).Например, используя falsetru'ы SafeDict:
И используя кореш'ы MyFormatter:
Ни хорошо работают во втором случае за искомое значение (в
число()
) уже раздели спецификации форматирования. Вместо этого, вы можете переопределитьvformat () " или " метод Parse () таким образом, что эти спецификации доступны. Мое решение ниже делает это путем переопределения
vformat()таким образом, она выполняет поиск ключа и если ключ отсутствует, убегает формат строки с двойными скобками (например,
{{две!р}}), а затем выполняет vformat нормального
()`.Здесь's это в действии:
Это решение слишком суховато (возможно переосмысление
метод Parse()
будет меньше костылей), но должно работать для большего количества строк форматирования.Нуждаясь в том, чтобы частично заполнить строки формата является общей проблемой, когда постепенно заполняя строки формата, например, для SQL-запросов.
format_partial (метод)
используетформатирования
отString
иАСТ
, чтобы разобрать строку формата, а также выяснить, есть ли им хэш-параметр имеет все необходимые параметры для того, чтобы частично оценить формат:format_partial
оставит неразрешенные часть строки формата, так что последующие вызовы могут быть использованы для решения тех частях, как данные доступны.goodmami's и чувак's отвечает кажутся чище, но они оба не могут передать в формате мини-язык полностью, как в
{Х:>{х}}
;format_partial
не будет иметь никаких проблем решить любой формат строки, строки.формат()` постановляет:Это даже легче для расширения функциональности старый стиль форматирования строк с помощью регулярных выражений вместо строки форматирования, как в старом формате подстрок регулярные (т. е. не вложенные маркеры).
Здесь'ы другой способ сделать это, используя python27:
Исходя из других ответов, я расширил решения. Это будет обрабатывать строки с форматированием спецификаций
" и{А:<10}"
в.Я обнаружил, что некоторые строки из журнала селен вызывая vformat (и format_map), чтобы поразить ограничение рекурсии. Я также хотел, чтобы я мог обрабатывать строки, где существуют пустые фигурные скобки, а также.
в
Для Python 3, принимая утвержденного ответа, это хороший, плотный, подходящие для Python реализации: