Python &引用;“值太多,无法解包”;例外情况

Python &引用;“值太多,无法解包”;例外情况,python,django,Python,Django,我正在Django的一个项目中工作,我刚刚开始尝试扩展用户模型以创建用户配置文件 不幸的是,我遇到了一个问题:每次我尝试在模板中获取用户的配置文件时(例如,user.get\u template.lastIP),我都会遇到以下错误: Environment: Request Method: GET Request URL: http://localhost:8000/ Django Version: 1.1 Python Version: 2.6.1 Template error: In t

我正在Django的一个项目中工作,我刚刚开始尝试扩展用户模型以创建用户配置文件

不幸的是,我遇到了一个问题:每次我尝试在模板中获取用户的配置文件时(例如,
user.get\u template.lastIP
),我都会遇到以下错误:

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 环境: 请求方法:获取 请求URL:http://localhost:8000/ Django版本:1.1 Python版本:2.6.1 模板错误: 在template/path/to/base.tpl中,第19行出现错误 呈现时捕获到异常:值太多,无法解压缩 19:Hello,{{user.username}}({{user.get_profile.rep})。进展如何?注销 异常类型:TemplateSyntaxError位于/ 异常值:呈现时捕获到异常:值太多,无法解压缩
关于发生了什么或我做错了什么,有什么想法吗?

最有可能的是get\u profile()调用中的某个地方出错。在您的视图中,在返回请求对象之前,请放置以下行:

request.user.get_profile()

它会引发错误,并为您提供更详细的回溯,然后您可以使用该回溯进行进一步调试。

该异常意味着您正在尝试解包一个元组,但该元组相对于目标变量的数量有太多的值。例如:这个工作,然后打印1,然后打印2,然后打印3

def returnATupleWithThreeValues():
    return (1,2,3)
a,b,c = returnATupleWithThreeValues()
print a
print b
print c
但这会引起你的错误

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

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

现在,我不知道为什么会发生这种情况,但也许这个答案会为您指出正确的方向。

当我使用Jinja2作为模板时,这种情况会发生在我身上。这个问题可以通过使用来自的命令运行开发服务器来解决


它使用了调试器,而调试器恰好更好,并且有一个非常好的交互式调试控制台。在任何帧(调用堆栈中)启动pythonshell都有一些ajax魔力,因此您可以进行调试。

这个问题看起来很熟悉,所以我想看看是否可以从有限的信息量中进行复制

通过快速搜索,James Bennett的博客中出现了一条条目,其中提到在使用UserProfile扩展用户模型时,settings.py中的一个常见错误可能会导致Django抛出此错误

要引用博客条目:

设置的值不是“appname.models.modelname”,而是“appname.modelname”。原因是Django没有使用它进行直接导入;相反,它使用一个内部模型加载函数,只需要应用程序名和模型名。尝试在AUTH_PROFILE_模块设置中执行诸如“appname.models.modelname”或“projectname.appname.models.modelname”之类的操作会导致Django出现可怕的“太多值无法解包”错误,因此请确保已在AUTH_PROFILE_模块的值中添加了“appname.modelname”而没有其他内容

如果OP复制了更多的回溯,我希望看到类似下面的内容,我可以通过在AUTH_PROFILE_模块设置中添加“models”进行复制

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
我认为这是Django仍然有一些导入魔法的少数情况之一,当一个小错误没有抛出预期的异常时,这些魔法往往会导致混乱

您可以在我发布的回溯末尾看到,在AUTH_PROFILE_模块中使用“appname.modelname”以外的任何形式都会导致行“app_label,model_name=settings.AUTH_PROFILE_MODULE.split('.')抛出“太多值无法解包”错误


我99%确定这是这里遇到的原始问题。

尝试在一个变量中解包

python将它作为一个列表来处理

然后从列表中解包

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
试图忘记 抛出
ValueError:要解压缩的值太多(预期为2个)

没有引发异常:

for index, value enumerate(in your_list):
  assert value is your_list[index]

没有足够的信息。请发布您的用户配置文件模型。如果您的
设置.py
中没有
AUTH_PROFILE_模块,会发生什么情况?有人能对此进行更多解释吗?@Sterfano Borini,我也收到了类似的错误,但在我的情况下,我创建了一个字符串作为
obj='{“vendorId”:“+vID+”,“vendorName:“+vName+”,“addedate”:“+vAddedDate+”,“usersList”:“+usersList+”,“status”:“+str(vStatus)+”,“edit”+“}”;
虽然所有的值都是字符串,但它会给我错误,我在python提示符下运行它,但在从web获取响应时,它会给我这个异常。你能建议出了什么问题吗?对于仍然没有得到它的人(比如我)解释了完全相同的事情…文字和图片让我明白:)错误不一定意味着正在解包
元组
。它可以是任何序列类型。它可能允许任何iterable类型;我无法立即回忆。
for index, value enumerate(in your_list):
  assert value is your_list[index]