Python Style Question

Rafael Romero Carmona rafaelromcar at gmail.com
Wed Oct 29 07:09:30 EDT 2014


Hi, first in Python 2.7.6 and Python 3.4.0 list haven't got any add
function but they have append.

I think you could do better with something like

==========
import json
l = [1, -1, 0, '1', '-1', '0', json.dumps(-1), json.dumps(1),
json.dumps(0), 'x', 'sqjklsqjk__', (1, 2)]

values = []

for c in l:
    try:
        c_int = int(c)
    except ValueError:
        pass
    except TypeError:
        pass
    else:
        values.append(c_int)
        continue
print(values)
==========

The code has been tested in Python 2.7.6 and 3.4 and returns [1, -1,
0, 1, -1, 0, -1, 1, 0]

You don't need to do two try because you can process both exceptions
in the same way. You don't really need to do json.loads because if you
have a json string which is an integer, you could do that directly
with int(c) which can take a string and transform in an integer.

With ValueError it captures the exception when it tries to transform
the characters' strings and with TypeError it captures the exception
when it tries to work with the tuples.

Have a good day and hope it works for you!

2014-10-29 11:42 GMT+01:00 Anton <anton.schattenfeld at gmail.com>:
> 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.
>
>
> --
> https://mail.python.org/mailman/listinfo/python-list



More information about the Python-list mailing list