Excepción "Demasiados valores para descomprimir"

Resuelto Steve Gattuso asked hace 14 años • 6 respuestas

Estoy trabajando en un proyecto en Django y acabo de empezar a intentar ampliar el modelo de usuario para crear perfiles de usuario.

Desafortunadamente, me encontré con un problema: cada vez que intento obtener el perfil del usuario dentro de una plantilla ( user.get_template.lastIP, por ejemplo), aparece el siguiente error:

Ambiente:

Método de solicitud: OBTENER
URL de solicitud: http://localhost:8000/
Versión de Django: 1.1
Versión de Python: 2.6.1

Error de plantilla:
En la plantilla /path/to/base.tpl, error en la línea 19
   Se detectó una excepción al renderizar: demasiados valores para descomprimir

19: Hola, {{user.username}} ({{ user.get_profile.rep}}). ¿Qué tal? Cerrar sesión


Tipo de excepción: TemplateSyntaxError en /
Valor de excepción: se detectó una excepción al renderizar: demasiados valores para descomprimir

¿Alguna idea sobre lo que está pasando o qué estoy haciendo mal?

Steve Gattuso avatar Sep 26 '09 05:09 Steve Gattuso
Aceptado

Esa excepción significa que estás intentando descomprimir una tupla, pero la tupla tiene demasiados valores con respecto al número de variables de destino. Por ejemplo: este trabajo, e imprime 1, luego 2, luego 3

def returnATupleWithThreeValues():
    return (1,2,3)
a,b,c = returnATupleWithThreeValues()
print a
print b
print c

Pero esto plantea tu error.

def returnATupleWithThreeValues():
    return (1,2,3)
a,b = returnATupleWithThreeValues()
print a
print b

eleva

Traceback (most recent call last):
  File "c.py", line 3, in ?
    a,b = returnATupleWithThreeValues()
ValueError: too many values to unpack

Ahora, la razón por la que esto sucede en tu caso, no lo sé, pero tal vez esta respuesta te indique la dirección correcta.

Stefano Borini avatar Sep 25 '2009 22:09 Stefano Borini

intente desempaquetar en una variable,

Python lo manejará como una lista,

luego descomprimir de la lista

def returnATupleWithThreeValues():
    return (1,2,3)
a = returnATupleWithThreeValues() # a is a list (1,2,3)
print a[0] # list[0] = 1
print a[1] # list[1] = 2
print a[2] # list[2] = 3
Ahmad Dwaik avatar Dec 14 '2009 08:12 Ahmad Dwaik