Python - Unsupported type(s) : range and range

Monk picture Monk · Nov 10, 2012 · Viewed 19.8k times · Source

I'm getting this strange error trying to run a script, the code appears to be correct but it seems python (3) didn't liked this part:

        def function(x):
                  if integer:
                    return int(x)
                else:
                    return x

            non_nil = randrange(21)
            d = dict([(randrange(101), Racional(coeff(randrange(-20,20)),
                                    coeff(choice(range(-30,0)+\
                                                 range(1,30)))))
                     for k in range(non_nil)])

And i get the following error:

for k in range(non_nil)]) unsupported operand type(s) for +: 'range' and 'range'

I already tried to put the last four lines in a single one but python returns the same error.

Answer

Dietrich Epp picture Dietrich Epp · Nov 10, 2012

This is because Python 3 range does not return a list, unlike Python 2. This code was written for Python 2.

This code should be changed:

range(-30,0) + range(1,30)

It should be changed to:

[*range(-30,0), *range(1,30)]

Prior to Python 3.5 (2015, PEP 448 - Additional Unpacking Generalizations), you cannot use * inside lists, and must write it this way instead (or you may prefer this):

list(range(-30,0)) + list(range(1,30))