[Bug #536241] string.zfill() produces mangled output for a Unicode string.

Walter Doerwald provided a patch, which I've modified in two ways:

1) (Uncontroversial) Removed code to make module work in earlier versions of
   Python without the unicode() built-in

2) (Poss. controversial) Instead of making string.zfill take the repr()
   of non-string objects, take the str().

Should a warning be added to this branch of the code so that the automatic
str() can be deprecated?

2.2.2 bugfix candidate, assuming the repr()->str() change is deemed OK.
This commit is contained in:
Andrew M. Kuchling 2002-03-29 16:20:33 +00:00
parent c6c9c4a10f
commit 102d1208a8

View file

@ -190,7 +190,7 @@ def rfind(s, *args):
_float = float _float = float
_int = int _int = int
_long = long _long = long
_StringType = type('') _StringTypes = (str, unicode)
# Convert string to float # Convert string to float
def atof(s): def atof(s):
@ -276,14 +276,14 @@ def zfill(x, width):
of the specified width. The string x is never truncated. of the specified width. The string x is never truncated.
""" """
if type(x) == type(''): s = x if not isinstance(x, _StringTypes):
else: s = `x` x = str(x)
n = len(s) n = len(x)
if n >= width: return s if n >= width: return x
sign = '' sign = ''
if s[0] in ('-', '+'): if x[0] in '-+':
sign, s = s[0], s[1:] sign, x = x[0], x[1:]
return sign + '0'*(width-n) + s return sign + '0'*(width-n) + x
# Expand tabs in a string. # Expand tabs in a string.
# Doesn't take non-printing chars into account, but does understand \n. # Doesn't take non-printing chars into account, but does understand \n.