How Best to Coerce Python Objects to Integers?

Erik python at lucidity.plus.com
Tue Jan 3 09:09:40 EST 2017


On 04/01/17 01:10, Steve D'Aprano wrote:
> On Wed, 4 Jan 2017 11:22 am, Erik wrote:
>> What he *should* have done is just validated his input strings before
>> presenting the string to int() - i.e., process the input with knowledge
>> that is specific to the problem domain before calling the
>> general-purpose function.
>
> That's the Look Before You Leap solution. But in this case, given the
> scenario described (a text file with a few typos), the best way is to ask
> for forgiveness rather than permission:

Yes, probably, in this case ;)

OK, in the case where the function you're calling is sane (and Python's int() 
is - it won't blindly accept "0x101" as a hex value, for example) then it's 
probably right that leaping first and then, on failure, processing the value 
and leaping again is the right thing to do.

[I tend to work in an environment where things I'm calling may not be sane (and 
in some cases I may never know), so I will usually consider LBYL as a way of 
CMA ;)].

In this whole discussion there has been no mention of what happens when the 
function returns None, though.

> Another thought: if he is receiving human generated input, there is an
> argument to be made for accepting "look alikes" -- e.g. maybe the data was
> entered by Aunt Tilly, who was a typist in the 1960s and can't break the
> habit of using l or I interchangeably for 1, and O for 0.

Sure - and that's what I meant by processing the string according to his 
problem "domain". If he has Aunt Tillys doing his data input, then l->1 and 
0->O may be a reasonable thing (I recently did a project where things like 
0-> converting Icelandic's Eth and Thorn runic letters to 'D' and 'P' - though 
0-> lly wrong ;) - was a reasonable character translation because that's what 
0-> le actually typed in).

E.



More information about the Python-list mailing list