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