Python Style Question
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Thu Oct 30 18:48:10 EDT 2014
MRAB wrote:
> On 2014-10-30 11:10, Steven D'Aprano wrote:
>> Anton wrote:
>>
>>> Let's say I have an incoming list of values *l*. Every element of *l*
>>> can be one of the following options:
>>> 1) an integer value
>>> 2) a string in form of '<int_value>', e.g. '7'
>>> 3) a string with a json serialization of an integer value, e.g. '"7"'
>>> 4) something else that should be ignored
>>>
>>> I need to transform this list into another list with values from options
>>> 1)-3) coerced to int. The code below should do this.
>>
>> I don't particularly like either version. I prefer this:
>>
>> def load_int(obj):
>> if isinstance(obj, int):
>> # Case 1), an int, e.g. 7
>> return obj
>> elif isinstance(obj, str):
>> # Case 2) and 3), a str or JSON serialised int.
>> # E.g. '7' or '"7"'.
>> try:
>> return int(obj)
>> except ValueError:
>> return int(json.loads(obj))
>> raise TypeError('require int or str, got %s' % type(obj).__name__)
>>
> [snip]
>
> How about:
>
> int(str(obj).strip('"'))
Absolutely not.
obj = '""""""""""""""1\n\n\n\n' # not valid JSON
load_int(obj)
=> raises ValueError
int(str(obj).strip('"'))
=> wrongly returns 1
--
Steven
More information about the Python-list
mailing list