[Python-Dev] surprising bug in s.capitalize()?

Michael Hudson mwh21@cam.ac.uk
30 Nov 2000 18:21:42 +0000


barry@digicool.com (Barry A. Warsaw) writes:

> I was just surprised by something I've never observed before from
> string.capitalize().  There is clearly either a bug (really two) in
> the code or in the documentation.
> 
> >>> '__Myfoo'.capitalize()
> '__myfoo'
> 
> Huh?  The documentation says:
> 
>     capitalize () 
>        Return a copy of the string with only its first character capitalized.
> 
> So it's only doing one of the three things it's promising!  For one
> thing, it's modifying something other than the first character, and
> for another, it's actually swapping the case of the character it /is/
> changing.  At least it returns a copy. :)

>>> 'AaAaAa'.capitalize()
'Aaaaaa'

That's not a ridiculous reading of the above docs.  It all depends
whether you think "being capitalized" is a property or an action, I
guess.

> Given the documentation, I would have expected the return value to be
> the same as the original string, i.e. unchanged.

I would probably have expected that, too.  But I'm not really sure
why.

> So which is it?  Does the description of the method need to be made
> more complicated, or does the code need to be simplified <wink>?

Clarifying the docs won't break any code.  Not sure that changing the
code will much, either.

Oooh, here's something a bit more serious though:

>>> u'aAaAaA'.capitalize()
u'AAaAaA'

Something obviously Needs To Be Done.  My hunch is to change
string_capitalize, but that may be just me (and probably Barry).

Cheers,
M.

-- 
  Famous remarks are very seldom quoted correctly.
                                                    -- Simeon Strunsky