2014-10-29 12:25 GMT+01:00 Martin Kemp <martin.k...@ingg.com>: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 29/10/2014 10:45, 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. >> >> >> Variant 1 === >> >> values = [] for c in l: # Case 1) or 2) try: c_int = int(c) except >> ValueError: pass else: values.add(c_int) continue >> >> # Case 3) try: c_int = int(json.loads(c)) except ValueError: pass >> else: values.add(c_int) continue >> >> === >> >> Is this code ugly? Does it follow EAFP? Am I missing something in >> language best practice? >> >> Or maybe below is more preferable way with a nested try...except >> clause? >> >> Variant 2 === values = [] for c in l: # Case 1) or 2) try: c_int = >> int(c) except ValueError: # Case 3) try: c_int = >> int(json.loads(c)) except ValueError: pass else: values.add(c_int) >> continue else: values.add(c_int) continue === >> >> Thanks, Anton. >> >> > > Your first example is perfectly fine and is EAFP >
Actually it doesn't work because there is no add function and it doesn't catch the TypeError function to ignore other exceptions than ValueError. Doesn't it? I tested in Python 2.7.6 and 3.4. > Personally, I prefer to avoid nesting when it's not necessary. > > - -- > Martin Kemp (martin.k...@ingg.com) > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2 > > iQEcBAEBAgAGBQJUUM7zAAoJEJ0Re0UIDzSucugIALn/zY8RdpP8iaMShHoszzqf > I0zl0mFHyqhNtwgQ0ZF7VGO+H+U0Dk8rhzTYOmEMzPTKNBGwll3fda9mOnrK9Xvp > 9gQjII6DyQIWH7Z3dLcLr2e1j8OMNUSL6UmAYs8urNSIKZLowdV3JI4G/bLyW0KS > y5Ko8dI6y5nOJ1P9XCmPTmags43UZfR8DrBUaAbzNcS8FGwmUE2KBkEhLQOvmpJi > jmMc7wMOpq0jL+XbA+7pHUqoVZ7w1tUFjuy9I3h45tgPuTFAFB0gX+FpE+oVgO5o > spQpVaOPEYN9ceLgHdKSxzdVIhOQLE6H/SYNHlsEW/ZNM6aR9n4yipgkOmtJ0+M= > =WzHA > -----END PGP SIGNATURE----- > -- > https://mail.python.org/mailman/listinfo/python-list -- https://mail.python.org/mailman/listinfo/python-list