On Sat, 29 Apr 2023 at 23:36, MRAB <pyt...@mrabarnett.plus.com> wrote: > > On 2023-04-29 08:31, Matsuoka Takuo wrote: > > On Sat, 29 Apr 2023 at 00:52, MRAB <pyt...@mrabarnett.plus.com> wrote: > >> > >> What happens if you do '{open}...{close}'.partial_format(open='{close}'? > >> You get '{close}...{close}', and you're going to have a problem using > >> that as a format string and replacing only the second '{close}'. > >> > >> Or how about '{open}...{close}'.partial_format(open='{')? You get > >> '{...{close}'. Try using that as a format string! > >> > >> That's why I think that the result of a partial format should be an > >> instance of a new class and not a string. > > > > That's a quite subtle point. I think > > '{open}...{close}'.partial_format(open='{close}') could be the string > > > > '{open}...{close}'.format(open='{{close}}', close='{close}') > > > > and '{open}...{close}'.partial_format(open='{') could be > > '{open}...{close}'.format(open='{{', close='{close}') > > > You might not know what the replacements are until runtime, so: > > '{open}...{close}'.partial_format(open=opening_item)
A good point, but that's not a problem. Escape of braces can and must be done after the argument is formatted. I hope the expression '{open}...{close}'.format( open=re.sub('([{}])', r'\1\1', f'{opening_item}'), close='{close}' ) looks better. (I'm only describing the imaginable result here, and not the exact procedure to get to it. I can only say there is at least one way to get to it.) _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/VJJNSMULCK7TJNJ2BMEHZ4JAOIPSQPDE/ Code of Conduct: http://python.org/psf/codeofconduct/