]> granicus.if.org Git - python/commitdiff
[Bug #536241] string.zfill() produces mangled output for a Unicode string.
authorAndrew M. Kuchling <amk@amk.ca>
Fri, 29 Mar 2002 16:20:33 +0000 (16:20 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Fri, 29 Mar 2002 16:20:33 +0000 (16:20 +0000)
    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.

Lib/string.py

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