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