How Best to Coerce Python Objects to Integers?
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
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).
More information about the Python-list