Error en la precedencia de operadores?
Chema Cortes
py en ls-l.org
Vie Oct 14 15:40:08 CEST 2005
Pepe Aracil escribió:
> Me he topado con este error.
> Supongo que sera un problema de precedencia de operadores.
>
>
> ---- Code ----
>
>>>> a = 5.3
>>>> b = 2.4
>>>>
>>>> print "%.2f" % a*b
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> TypeError: can't multiply sequence to non-int
>
> -----
>
> La verdad es que a uno se le queda cara de tonto hasta que descubre que
> ha intentado multiplicar una cadena por un numreo real.
>
> En fin, creo que el operador "%" cuando se ecuentra en una cadena con
> formato, deberia tener la precedencia más baja posible. No así cuando se
> trata de una división de enteros. Esto supongo que pasa por reutilizar
> un mismo operador para operaciones diferentes.
El problema proviene de haber reutilizado el operador módulo para el
operador de formato. Como operador módulo, '%' tiene la misma prioridad
que los operadores '*' y '/', por lo que su orden de evaluación es de
izquierda a derecha.
Si te molesta mucho, puedes hacer algo así:
>>> from operator import mod as format
>>> print format("%.2f", a*b)
Más información sobre la lista de distribución Python-es