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. -- https://mail.python.org/mailman/listinfo/python-list