Eric Smith wrote: > Ron Adam wrote: >>> I've been re-reading the PEP, in an effort to make sure everything is >>> working. I realized that these tests should not pass. The PEP says >>> that "Format specifiers can themselves contain replacement fields". >>> The tests above have replacement fields in the field name, which is >>> not allowed. I'm going to remove this functionality. >>> >>> I believe the intent is to support a replacement for: >>> "%.*s" % (4, 'how now brown cow') >>> >>> Which would be: >>> "{0:.{1}}".format('how now brown cow', 4) >>> >>> For this, there's no need for replacement on field name. I've taken >>> it out of the code, and made these tests in to errors. >> >> I think it should work myself, but it could be added back in later if >> there is a need to. >> >> >> I'm still concerned about the choice of {{ and }} as escaped brackets. >> >> What does the following do? >> >> >> "{0:{{^{1}}".format('Python', '12') > > >>> "{0:{{^{1}}".format('Python', '12') > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > ValueError: unterminated replacement field
When are the "{{" and "}}" escape characters replaced with '{' and '}'? > But: > >>> "{0:^{1}}".format('Python', '12') > ' Python ' > >> "{{{0:{{^{1}}}}".format('Python', '12') > >>> "{{{0:{{^{1}}}}".format('Python', '12') > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > ValueError: Unknown conversion type } > > But, > >>> "{{{0:^{1}}".format('Python', '12') > '{ Python ' So escaping '{' with '{{' and '}' with '}}' doesn't work inside of format expressions? That would mean there is no way to pass a brace to a __format__ method. >> class ShowSpec(str): >> >> return spec >> >> ShowSpec("{0:{{{1}}}}").format('abc', 'xyz') >> > > >>> ShowSpec("{0:{{{1}}}}").format('abc', 'xyz') > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > ValueError: Invalid conversion specification > I think you mean: > ShowSpec("{0:{1}}").format('abc', 'xyz') No, because you may need to be able to pass the '{' and '}' character to the format specifier in some way. The standard specifiers don't use them, but custom specifiers may need them. > But I have some error with that. I'm looking into it. > >> "{0}".format('{value:{{^{width}}', width='10', value='Python') > > >>> "{0}".format('{value:{{^{width}}', width='10', value='Python') > '{value:{{^{width}}' Depending on weather or not the evaluation is recursive this may or may not be correct. I think it's actually easier to do it recursively and not put limits on where format specifiers can be used or not. _RON _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com