int/long bug in locale?

Neil Cerutti horpner at yahoo.com
Tue Aug 28 17:50:06 CEST 2007


On 2007-08-28, tkpmep at hotmail.com <tkpmep at hotmail.com> wrote:
>>>> import locale
>
>>>>locale.setlocale(locale.LC_ALL, 'English_United States.1252')
> 'English_United States.1252'
>
>>>> locale.format('%d', float('2244012500.0000'), grouping = True)
>
> Traceback (most recent call last):
>   File "<pyshell#28>", line 1, in <module>
>     locale.format('%d', float('2244012500.0000'), grouping = True)
>   File "C:\Python25\lib\locale.py", line 145, in format
>     formatted = percent % value
> TypeError: int argument required
>
> However, if the number is <= 2**31-1, it works just fine:
>>>>locale.format('%d', float('224401250.0000'), grouping = True)
> '224,401,250'
>
> Interestingly, if I first convert the floats to ints, , the function
> works just fine, even if the numbers exceed 2**31-1:
>>>> locale.format('%d', int(float('2244012500.0000')), grouping = True)
> '2,244,012,500'
>
> Is there an int/long related bug lurking in locale?

If it is a bug, it is not in the locale code.

>>> '%d' % float('224401250000.0000')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int argument required

The documentation for the string formating operation doesn't
specify what happens when you convert a non-int with specifier
'%d'. In defense of your code, there's also no explicit
requirement to do that.

http://docs.python.org/lib/typesseq-strings.html

-- 
Neil Cerutti



More information about the Python-list mailing list