Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Если форматирующие строки поступают от пользователей, то используйте шаблонные строки, чтобы избежать проблем с безопасностью.
В противном случае используйте интерполяцию литеральных строк при
условии, что вы работаете с Python 3.6+, и «современное» форматирование строк — если нет.
>>> SECRET = 'это – секрет' >>> class Error: ... def __init__(self): ... pass >>> err = Error() >>> user_input = '{error.__init__.__globals__[SECRET]}' # Ой-ей-ей... >>> user_input.format(error=err) 'это – секрет'
>>> user_input = '${error.__init__.__globals__[SECRET]}'
>>> Template(user_input).substitute(error=err)
ValueError:
"Invalid placeholder in string: line 1, col 1"
Армин тоже разбирал этот момент: http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/
F-strings работают только на Python 3.6+, но скоро это не будет проблемой так как другие версии устареют.
f'''-{f"""*{f"+{f'.{x}.'}+"}*"""}-'''
F-strings или как сделать код чуть более быстрым и читаемым