try - excepciones en python
"Demasiados valores para descomprimir" Excepción (5)
Esa excepción significa que está 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 su error
def returnATupleWithThreeValues():
return (1,2,3)
a,b = returnATupleWithThreeValues()
print a
print b
plantea
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 su caso, no lo sé, pero tal vez esta respuesta lo guiará en la dirección correcta.
Estoy trabajando en un proyecto en Django y recién comencé a tratar de ampliar el modelo de usuario para crear perfiles de usuario.
Desafortunadamente, me he encontrado con un problema: cada vez que trato de obtener el perfil del usuario dentro de una plantilla ( user.get_template.lastIP
, por ejemplo), user.get_template.lastIP
el siguiente error:
Environment: Request Method: GET Request URL: http://localhost:8000/ Django Version: 1.1 Python Version: 2.6.1 Template error: In template /path/to/base.tpl, error at line 19 Caught an exception while rendering: too many values to unpack 19 : Hello, {{user.username}} ({{ user.get_profile.rep}}). How''s it goin? Logout Exception Type: TemplateSyntaxError at / Exception Value: Caught an exception while rendering: too many values to unpack
¿Alguna idea sobre lo que está pasando o lo que estoy haciendo mal?
Este problema parecía familiar, así que pensé en ver si podía replicar a partir de la cantidad limitada de información.
Una búsqueda rápida encontró una entrada en el blog de James Bennett que menciona que cuando se trabaja con el perfil de usuario para extender el modelo de usuario, un error común en settings.py puede hacer que Django presente este error.
Para citar la entrada del blog:
El valor de la configuración no es "appname.models.modelname", es solo "appname.modelname". La razón es que Django no está usando esto para hacer una importación directa; en su lugar, usa una función interna de carga de modelos que solo quiere el nombre de la aplicación y el nombre del modelo. Intentar hacer cosas como "appname.models.modelname" o "projectname.appname.models.modelname" en la configuración AUTH_PROFILE_MODULE hará que Django explote con el temido error "demasiados valores para descomprimir", así que asegúrate de que has pon "appname.modelname", y nada más, en el valor de AUTH_PROFILE_MODULE.
Si el OP hubiera copiado más de la trazabilidad, esperaría ver algo como el siguiente que pude duplicar agregando "modelos" a mi configuración AUTH_PROFILE_MODULE.
TemplateSyntaxError at /
Caught an exception while rendering: too many values to unpack
Original Traceback (most recent call last):
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/debug.py", line 71, in render_node
result = node.render(context)
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/debug.py", line 87, in render
output = force_unicode(self.filter_expression.resolve(context))
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 535, in resolve
obj = self.var.resolve(context)
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 676, in resolve
value = self._resolve_lookup(context)
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/template/__init__.py", line 711, in _resolve_lookup
current = current()
File "/home/brandon/Development/DJANGO_VERSIONS/Django-1.0/django/contrib/auth/models.py", line 291, in get_profile
app_label, model_name = settings.AUTH_PROFILE_MODULE.split(''.'')
ValueError: too many values to unpack
Este es uno de los pocos casos en que Django todavía tiene un poco de magia de importación que tiende a causar confusión cuando un pequeño error no arroja la excepción esperada.
Puede ver al final de la trazabilidad que publiqué cómo usar cualquier otra cosa que no sea la forma "nombreaplicación.modelname" para AUTH_PROFILE_MODULE provocaría que la línea "app_label, model_name = settings.AUTH_PROFILE_MODULE.split (''.'')" Arrojara el error "demasiados valores para descomprimir".
Estoy 99% seguro de que este fue el problema original encontrado aquí.
Esto me sucede cuando estoy usando Jinja2 para plantillas. El problema se puede resolver ejecutando el servidor de desarrollo usando el comando django_extensions de django_extensions .
Utiliza el depurador werkzeug que también es mucho mejor y tiene una muy buena consola de depuración interactiva. Hace algo de magia ajax para lanzar un shell python en cualquier marco (en la pila de llamadas) para que puedas depurar.
Lo más probable es que haya un error en algún lugar de la llamada get_profile (). En su opinión, antes de devolver el objeto de solicitud, coloque esta línea:
request.user.get_profile()
Debería generar el error y proporcionarle un seguimiento más detallado, que luego puede usar para depurar aún más.
intenta desempacar 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