"포장을 풀기에 너무 많은 값"예외


116

저는 Django에서 프로젝트를 진행 중이며 사용자 프로필을 만들기 위해 사용자 모델을 확장하기 시작했습니다.

불행히도 문제가 발생했습니다. 템플릿 ( user.get_template.lastIP예 :)에서 사용자 프로필을 가져 오려고 할 때마다 다음 오류가 발생합니다.

환경:

요청 방법 : GET
요청 URL : http : // localhost : 8000 /
Django 버전 : 1.1
Python 버전 : 2.6.1

템플릿 오류 :
템플릿 /path/to/base.tpl에서 19 행 오류
   렌더링 중 예외 발생 : 압축을 풀기에 너무 많은 값

19 : 안녕하세요, {{user.username}} ({{user.get_profile.rep}}). 어떻게 지내요? 로그 아웃


예외 유형 : TemplateSyntaxError at /
예외 값 : 렌더링하는 동안 예외 발생 : 압축을 풀기에 너무 많은 값

무슨 일이 일어나고 있는지 또는 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?


3
정보가 충분하지 않습니다. UserProfile 모델을 게시하십시오.
Daniel Roseman

답변:


189

이 예외는 튜플을 풀려고하지만 튜플에 대상 변수의 수에 비해 너무 많은 값이 있음을 의미합니다. 예 :이 작품은 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

자, 이것이 귀하의 경우에 발생하는 이유는 모르겠지만이 답변이 올바른 방향을 가리킬 것입니다.


1
@Sterfano Borini, 비슷한 오류가 발생하지만 제 경우에는 obj='{"vendorId": "' + vID +'", "vendorName" :"'+vName+'", "addedDate" : "'+vAddedDate+'","usersList" : "'+ usersList + '," status" : "'+str(vStatus)+'","edit"'+edit+'"}';모든 값이 문자열 이지만 오류가 발생하는 것처럼 문자열을 생성하고 있습니다. 실행중인 Python 프롬프트에서 실행하지만 웹에서 응답을받는 동안 이 예외를 제공합니다. 무슨 일이 일어나고 있는지 제안 해 주시겠습니까?
MegaBytes

누군가를 위해 여전히 didnt한다 (즉, 나)를 얻을 이 비디오는 : 어떻게 든 나를 이해했다 단어와 그림으로 ... 똑같은 설명
웨슬리 스미스

오류가 반드시 a tuple가 압축 해제되었음을 의미하는 것은 아닙니다 . 모든 시퀀스 유형이 될 수 있습니다. 모든 반복 가능한 유형을 허용 할 수 있습니다. 나는 직접 기억할 수 없다.
jpmc26

20

하나의 변수에서 압축을 풀고

파이썬은 그것을 목록으로 처리합니다.

그런 다음 목록에서 압축을 풉니 다.

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

4
누군가 이것에 대해 더 설명 할 수 있습니까?
피기 백

8

이 문제는 익숙해 보였기 때문에 제한된 양의 정보에서 복제 할 수 있는지 확인할 수있을 것이라고 생각했습니다.

빠른 검색 제임스 베넷의 블로그에 항목을 설정 여기서 사용자 모델을 확장하기 위해 사용자 프로필 작업을 할 때 settings.py에서 일반적인 실수는 장고가이 오류를 발생시킬 수 있음을 언급한다.

블로그 항목을 인용하려면 :

설정 값은 "appname.models.modelname"이 아니라 "appname.modelname"입니다. 그 이유는 Django가 이것을 사용하여 직접 가져 오기를 수행하지 않기 때문입니다. 대신 앱 이름과 모델 이름 만 원하는 내부 모델 로딩 기능을 사용하고 있습니다. AUTH_PROFILE_MODULE 설정에서 "appname.models.modelname"또는 "projectname.appname.models.modelname"과 같은 작업을 시도하면 Django가 무서운 "압축을 풀기에 너무 많은 값"오류와 함께 폭발 할 수 있습니다. AUTH_PROFILE_MODULE의 값에는 "appname.modelname"만 입력합니다.

OP가 더 많은 트레이스 백을 복사 한 경우 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

이것은 Django가 작은 오류가 예상되는 예외를 던지지 않을 때 혼란을 일으키는 경향이있는 약간의 가져 오기 마법을 가지고있는 몇 안되는 경우 중 하나라고 생각합니다.

AUTH_PROFILE_MODULE에 대해 "appname.modelname"형식이 아닌 다른 것을 사용하면 "app_label, model_name = settings.AUTH_PROFILE_MODULE.split ( '.')"줄이 어떻게 "압축을 풀기에 너무 많은 값"오류.

저는 이것이 여기서 발생한 원래 문제라고 99 % 확신합니다.


당신이 당신의 AUTH_PROFILE_MODULE안에 있지 않은 경우 어떻게됩니까 settings.py?
Sevenearths 2012-06-06

0

get_profile () 호출 어딘가에 오류가있을 가능성이 높습니다. 보기에서 요청 객체를 반환하기 전에 다음 줄을 입력하십시오.

request.user.get_profile()

오류가 발생하고 더 자세한 트레이스 백을 제공하여 추가 디버깅에 사용할 수 있습니다.


0

템플릿에 Jinja2를 사용할 때 이런 일이 발생합니다. django_extensionsrunserver_plus 명령을 사용하여 개발 서버를 실행하면 문제를 해결할 수 있습니다 .

werkzeug 디버거를 사용합니다 .이 디버거는 훨씬 더 좋으며 매우 멋진 대화 형 디버깅 콘솔을 가지고 있습니다. 디버그 할 수 있도록 모든 프레임 (호출 스택에서)에서 Python 셸을 시작하는 ajax 마법을 사용합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.