오류 :“사전 업데이트 시퀀스 요소 # 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

해결책"

키워드 인수에 전달 이름을 보기 이름 예를 들어, 같은 값으로 homehome-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.