오류 :“사전 업데이트 시퀀스 요소 # 0의 길이는 1입니다. Django 1.4의 경우 2가 필요합니다.


157

django 1.4에 오류 메시지가 있습니다.

사전 업데이트 시퀀스 요소 # 0의 길이는 1입니다. 2가 필요합니다

[편집하다]

`{% for v in values ​​%}와 같은 템플릿 태그를 사용하려고 시도했을 때 발생했습니다.

dictionary update sequence element #0 has length 1; 2 is required

Request Method:     GET
Request URL:    ...
Django Version:     1.4.5
Exception Type:     ValueError
Exception Value:    

dictionary update sequence element #0 has length 1; 2 is required

Exception Location:     /usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __init__, line 21
Python Executable:  /usr/bin/uwsgi-core
Python Version:     2.7.3
Python Path:    

['/var/www/',
 '.',
 '',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/pymodules/python2.7']

Server time:    sam, 13 Jul 2013 16:15:45 +0200
Error during template rendering

In template /var/www/templates/app/index.html, error at line 172
dictionary update sequence element #0 has length 1; 2 is required

172     {% for product in products %}

Traceback Switch to copy-and-paste view

/usr/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response

                            response = callback(request, *callback_args, **callback_kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/contrib/auth/decorators.py in _wrapped_view

                    return view_func(request, *args, **kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/views/decorators/http.py in inner

                return func(request, *args, **kwargs)

    ...
▶ Local vars
./app/views.py in index

            context_instance=RequestContext(request))

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/shortcuts/__init__.py in render_to_response

        return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/loader.py in render_to_string

            return t.render(context_instance)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                return self._render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in _render

            return self.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/loader_tags.py in render

            return compiled_parent._render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in _render

            return self.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/loader_tags.py in render

                result = block.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/template/defaulttags.py in render

            len_values = len(values)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/core/paginator.py in __len__

            return len(self.object_list)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/db/models/query.py in __len__

                    self._result_cache = list(self.iterator())

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/db/models/query.py in iterator

                        obj = model(*row[index_start:aggregate_start])

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/django/db/models/base.py in __init__

                    setattr(self, field.attname, val)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __set__

                value = self.field._attribute_class(value, self.field, obj)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __init__

            super(HStoreDictionary, self).__init__(value, **params)

    ...
▶ Local vars

hstore 쿼리 세트에서 액세스하려고 할 때도 발생합니다.

[편집하다]

Traceback (most recent call last):
File "manage.py", line 14, in <module>
    execute_manager(settings)

File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 459, in execute_manager
    utility.execute()

File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)

File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)

File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)

File "/home/name/workspace/project/app/data/commands/my_command.py", line 60, in handle
    item_id = tmp[0].id,

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 207, in __getitem__
    return list(qs)[0]

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 87, in __len__
    self._result_cache.extend(self._iter)

File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 301, in iterator
    obj = model(*row[index_start:aggregate_start])

File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 300, in __init__
    setattr(self, field.attname, val)

File "/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py", line 38, in __set__
    value = self.field._attribute_class(value, self.field, obj)

File "/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py", line 21, in __init__
    super(HStoreDictionary, self).__init__(value, **params)

ValueError: dictionary update sequence element #0 has length 1; 2 is required

코드는 다음과 같습니다

tmp = Item.objects.where(HE("kv").contains({'key':value}))

if tmp.count() > 0:

    item_id = tmp[0].id,

값에 액세스하려고합니다. "업데이트 순서"메시지를 이해하지 못합니다. hstore queryset 대신 커서를 사용하면 함수가 작동합니다. 템플릿 렌더링에도 오류가 발생합니다. 방금 다시 시작했는데 uwsgi모든 것이 제대로 작동하지만 나중에 오류가 다시 발생합니다.

[편집하다]

누군가 아이디어가 있습니까?


에서의 쇼 무엇을하는 코드를 게시하시기 바랍니다 values하고 tmp. 코드가 누락 된 경우이 질문에 대해 -1 (일시적 일 수 있음)입니다.
— ElmoVanKielmo

주석으로 추가하겠습니다. 튜플 대신 목록을 사용했기 때문에 오류가 발생했습니다. 이것은 오류를 일으킨다 : dict(['A',"b"])그렇지 않은 동안dict([('A',"b")])
— NelsonGon

답변:


397

이 문제가 발생했습니다. 코드에 맞는 것과 같은 것인지 모르겠지만 근본 원인은 (또는 name=마지막 인수를 취하는 것을 잊었 기 때문 입니다.urlpath Django 2.0 이상에서) 함수 호출 입니다.

예를 들어 다음 함수는 질문에서 오류를 발생시킵니다.

url(r'^foo/(?P<bar>[A-Za-z]+)/$', views.FooBar.as_view(), 'foo')
path('foo/{slug:bar}/', views.FooBar, 'foo')

그러나 이들은 실제로 작동합니다.

url(r'^foo/(?P<bar>[A-Za-z]+)/$', views.FooBar.as_view(), name='foo')
path('foo/{slug:bar}/', views.FooBar, name='foo')

역 추적이 도움이되지 않는 이유는 내부적으로 Django가 주어진 위치 인수를 키워드 argument 로 구문 분석하고 kwargs문자열이 반복 가능하므로 비정형 코드 경로가 전개되기 때문입니다. 항상 name=URL을 사용 하십시오!


40
이 답변은 파악하기 어려운 모호한 오류를 다루기 때문에 매우 좋습니다. 노련한 장고 개발자 조차도이 특정 함정에 빠질 수 있습니다.
— glarrain

4
특히 Router.registerDjango RestFramework 의 방법을 사용하는 경우 . 매우 비슷해 보이는 차이점은 namekwarg입니다.
— Risadinha

4
비생산적으로 보냈던 반 시간은 다시는 돌아 오지 않을 것입니다. tnx.
— Iman Akbari

2
훌륭한! 내가 잊어 버린 것 : S
— rschwieb

2
참고로 Django 2.0 스타일 pathURL을 사용 하여이 오류가 발생했습니다 . kwarg를 사용하는 것을 잊어 버렸고 다음과 같이했습니다 path('foo/', views.foo, 'foo'). 나는로 변경했다path('foo/', views.foo, name='foo')
— inostia

38

문자열과 사전을 어지럽 힐 때이 오류가 발생했습니다.

dict1 = {'taras': 'vaskiv', 'iruna': 'vaskiv'}
str1 = str(dict1)
dict(str1)
*** ValueError: dictionary update sequence element #0 has length 1; 2 is required

따라서 문자열에서 dict를 얻으려면 실제로해야 할 일은 다음과 같습니다.

dic2 = eval(str1)
dic2
{'taras': 'vaskiv', 'iruna': 'vaskiv'}

또는 보안상의 이유로 literal_eval을 사용할 수 있습니다.

from ast import literal_eval

다른 방법이 있습니까?
— adam shamsudeen

28

다음과 같은 것을 시도하면 질문에 오류가 발생합니다.

>>> a_dictionary = {}
>>> a_dictionary.update([[1]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required

코드를 표시하지 않으면 코드의 원인이 어디인지 파악하기가 어렵습니다.


5
이것은 원인이 질문에 포함되지 않았 음을 확인합니다.
— ElmoVanKielmo

다음 번에 답장을 보내 주셔서 감사합니다. 트레이스 백을 복사하겠습니다. 그러나 템플릿 태그에서 발생했을 때, uwsgi가 다시 시작된 직후에 결과가 올바르게 표시되어 결과가 나타납니다.
— user2575627

2
@ user2575627, 왜 지금 코드 / 트레이스 백을 게시하지 않습니까? 질문을 업데이트 (편집)하십시오.
— falsetru

죄송합니다. 서비스를 수리 / 수정하는 것이 시급했기 때문에 코드 / 트레이스 백을 게시하지 않았습니다. 따라서 처음으로 트레이스 백을 복사하지 않았습니다
— user2575627

@ user2575627, /home/name/workspace/project/app/data/commands/my_command.py line 60 주위에 코드를 게시 할 수 있습니까?
— falsetru

18

키워드 인수 이름 을 url () 함수 에 전달하는 것을 잊었을 때 위에서 언급 한 문제에 직면했습니다 .

오류가있는 코드

 url(r"^testing/$", views.testing, "testing")

오류없는 코드

url(r"^testing/$", views.testing, name="testing")

그래서 마지막으로 위의 오류를 이런 식으로 제거했습니다. 귀하의 경우에는 다를 수 있습니다. 따라서 urls.py 에서 URL 패턴을 확인하십시오 .


1
2019 년과 동일한 stackoverflow 응답으로 여전히 저를 구할 수 있습니다
— Long Nguyen

응, 고마워 SO는 실제로 개발자, 과학자 및 다른 사람들에게 훌륭한 플랫폼입니다.
— hygull

10

해결책"

키워드 인수에 전달 이름을 보기 이름 예를 들어, 같은 값으로 home나 home-view에게 등url() 기능.

오류 발생»

url(r'^home$', 'common.views.view1', 'home'),

옳은"

url(r'^home$', 'common.views.view1', name='home'),


9

재현 된 오류는 다음과 같습니다.

>>> d = {}
>>> d.update([(1,)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 
>>> d
{}
>>> 
>>> d.update([(1, 2)])
>>> d
{1: 2}
>>> 
>>> d.update('hello_some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>  
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 

시퀀스를 제공하고 요소 길이가 1이고 2가 필요한 경우 이러한 종류의 오류가 발생합니다. 위의 코드를 참조하십시오. 처음으로 튜플로 시퀀스를 제공하고 길이가 1이면 오류가 발생하고 사전이 업데이트되지 않습니다. 두 번째 요소로 튜플 내부에 두 번째로 갔을 때 사전이 업데이트되었습니다.


shortucts.redirect를 사용하여 동일한 오류가 발생하고 외부 페이지로 응답을 보내려고합니다. 예 : '[code] return redirect ( " msn.com") [/ code]
— roblem

3

같은 문제가 발생하여 매개 변수가 잘못되었다는 것을 알았습니다. 에 views.py, 내가 사용 :

return render(request, 'demo.html',{'items', items})    

그러나 나는 문제를 발견했다 {'items', items}. {'items': items}문제 해결로 변경


2

내 경우 get_context_data에는 내보기 중 하나에서 돌아 오는 return render(self.request, 'es_connection_error.html', {'error':error});대신 try / catch 블록으로 돌아왔다.context


2

매개 변수에 오류가 있어야합니다. 매개 변수가 사전 개체인지 확인하십시오 . 인수의 목록 / 튜플 인 경우 *params두 개의 * ( **params) 대신 * ( ) 하나만 사용하십시오 . 이것은리스트 / 튜플을 적절한 양의 인수로 분해합니다.

또는 매개 변수가 코드의 다른 부분에서 JSON 파일로 제공되는 json.loads(params)경우 JSON 객체는 때로는 문자열로 작동하므로 문자열에서로드를 사용하여 JSON으로 만들어야하기 때문에 수행하십시오.

super(HStoreDictionary, self).__init__(value, **params)

도움이 되었기를 바랍니다!


1

잘못된 유형의 매개 변수로 update 메소드를 호출하려고 할 때이 문제가 발생했습니다. 예상되는 명령은 다음과 같습니다.

{'foo': True}

전달 된 것은 :

{'foo': "True"}

전달한 모든 매개 변수가 예상 유형인지 확인하십시오.


0

하나의 매개 변수를 잘못 보내고 있습니다. 그것은 있어야합니다 dictionary object:

  • 잘못된: func(a=r)

  • 옳은: func(a={'x':y})


0

나도 비슷한 유형의 문제가 있었다. 해결책은 간단하다. 값에 NULL 또는 None 값을 입력하지 마십시오. 또는 u는 이와 같은 것을 사용해야 할 수도 있습니다
dic.update([(key,value)])

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