[Python-3000] PEP 3101 Updated

Ron Adam rrr at ronadam.com
Thu Aug 23 03:08:35 CEST 2007


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


More information about the Python-3000 mailing list

AltStyle によって変換されたページ (->オリジナル) /