История изменений
Исправление AntonI, (текущая версия) :
Ну он делает ровно то что должен;-)
-
пытается отформатировать строку el по словарю tmp_scope и добавить результат в выходную последовательность.
-
если вылетел KeyError - пытается вычислить ключ (то что было в паттерне между { }) и добавить соответствующую запись в tmp_scope, что бы в следующий заход там не падало а запись встала на место
-
если eval упал, пишет в tmp_scope запись дублирующую ключ, что бы паттерн после подстановки не поменялся
Хотя один баг там таки есть, он ломается на незакрытых фигурных скобках - наверное это надо ловить и оставлять не отформатированным.
PS цикл нужен что бы все ключи разрешить, то есть он долбится в str.format пока в tmp_scope не будет все что нужно для успешного форматирования. В % это решалось сразу, ну что делать…
Вообще eval в try заворачивать это хорошая практика, если хочется хоть как то контролировать ситуацию.
Исходная версия AntonI, :
Ну он делает ровно то что должен;-)
-
пытается отформатировать строку el по словарю tmp_scope и добавить результат в выходную последовательность.
-
если вылетел KeyError - пытается вычислить ключ (то что было в паттерне между { }) и добавить соответствующую запись в tmp_scope, что бы в следующий заход там не падало а запись встала на место
-
если eval упал, пишет в tmp_scope запись дублирующую ключ, что бы паттерн после подстановки не поменялся
Хотя один баг там таки есть, он ломается на незакрытых фигурных скобках - наверное это надо ловить и оставлять не отформатированным.
Вообще eval в try заворачивать это хорошая практика, если хочется хоть как то контролировать ситуацию.