[Tutor] Limitation of int() in converting strings

Mitya Sirenef msirenef at lightbird.net
Mon Dec 17 05:41:05 CET 2012


On 12/16/2012 11:19 PM, boB Stepp wrote:
>>>> int('10.0')
 > Traceback (most recent call last):
 > File "<interactive input>", line 1, in <module>
 > ValueError: invalid literal for int() with base 10: '10.0'
 >>>> int("10")
 > 10
 >
 > It is apparent that int() does not like strings with floating-point
 > formats. None of my books (as far as my flipping can tell) or the
 > below built-in help clarify this:
 >
 >
 > Help on int object:
 >
 > class int(object)
 > | int(x[, base]) -> integer
 > |
 > | Convert a string or number to an integer, if possible. A floating
 > | point argument will be truncated towards zero (this does not include a
 > | string representation of a floating point number!) When converting a
 > | string, use the optional base. It is an error to supply a base when
 > | converting a non-string.
 >
 > Of course if I type int(float('10.0')) I get the desired 10 .
 >
 > So, I am guessing that to convert strings to integers with int() that
 > the string must already be of integer format? What is the rationale
 > for setting up int() in this manner?
 >
 > Thanks as I continue to puzzle over the fine points of the basics...
 > boB


What would you want to happen for int("10.5")? If 10.0 was accepted,
it would be consistent to accept 10.5, too.

The issue, I think, is that a simple operation should not go too far
beyond what it is supposed to do - if you are sure you are converting a
float in a string, you need to do it explicitly, and if you're
converting a string to an int and the string is not actually an int,
then maybe it wasn't supposed to be a float and it's a mistake in the
program -- and therefore python should alert you.


-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/



More information about the Tutor mailing list