Hata: “Sözlük güncelleme sıra öğesi # 0 uzunluğu 1; 2 gerekli ”Django 1.4'te


157

Ben django 1.4 bir hata mesajı var:

sözlük güncelleme sıra elemanı # 0 uzunluğu 1; 2 gerekli

[DÜZENLE]

Şunun gibi bir şablon etiketi kullanmayı denediğimde oldu:% {değerlerde% için v%}:

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

Bir hstore sorgu kümesinde erişmeye çalıştığımda da olur:

[Düzenle]

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

kod:

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

if tmp.count() > 0:

    item_id = tmp[0].id,

Ben sadece değere erişmeye çalışıyorum. "Güncelleme sırası" mesajını anlamıyorum. Ben hstore queryset yerine bir imleç kullandığımda, işlev çalışır. Hata, şablon oluşturma işleminde de görülür. Sadece yeniden başladım uwsgive her şey iyi çalışıyor, ancak hata daha sonra geri geliyor.

[Düzenle]

Birinin bir fikri var mı?


Lütfen içinde ne olduğunu gösteren kodu gönderin values ve tmp. Kod eksik olsa da, bu soru için -1 (muhtemelen geçici).
ElmoVanKielmo

Yorum olarak ekleyeceğim. Hatayı aldım çünkü tuple yerine bir liste kullandım. Bu hatayı yükseltir: dict(['A',"b"])bu gerçekleşmezdict([('A',"b")])
NelsonGon

Yanıtlar:


397

Sadece bu problemle karşılaştı. Kodunuzu vurmak aynı şey olup olmadığını bilmiyorum, ama benim için temel nedeni (veya Django 2.0+) işlev çağrısının name=son argüman koymak unuttum çünkü oldu .urlpath

Örneğin, aşağıdaki işlevler hatayı sorudan atar:

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

Ama bunlar aslında işe yarıyor:

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

Geri izlemenin yararsız olmasının nedeni, Django'nun dahili olarak verilen konum bağımsız değişkenini anahtar kelime bağımsız değişkeni olarak ayrıştırmak istemesidir.kwargs istemesidir ve bir dize yinelenebilir olduğundan atipik bir kod yolu ortaya çıkmaya başlar. Her zaman name=url'lerinizde kullanın !


40
Bu cevap çok iyidir, çünkü anlaşılması zor olan belirsiz bir hatayı kapsar. Tecrübeli Django geliştiricileri bile bu özel tuzağa düşebilir.
glarrain

4
Özellikle de Router.registerDjango RestFramework yöntemini kullanıyorsanız. Çok benzer görünüyor, fark namekwarg ...
Risadinha

4
yani verimsiz olarak harcanan yarım saat, asla geri gelmeyecek. tnx.
Iman Akbari

2
Parlak! Tam olarak unuttuğum şey: S
rschwieb

2
Bilginize Django 2.0 stil pathURL'sini kullanarak da bu hatayı aldım . Kwarg kullanmaya unuttunuz ve bu vardı: path('foo/', views.foo, 'foo'). Ben değiştirmek zorundapath('foo/', views.foo, name='foo')
inostia

38

Dize ve sözlük ile uğraşırken bu hatayı aldım.

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

Dizeden dikte almak için yapmanız gereken şey:

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

Veya güvenlik konusunda literal_eval kullanabiliriz

from ast import literal_eval

Bunu yapmanın başka bir yolu var mı?
adam shamsudeen

28

Aşağıdaki gibi bir şey denediğinizde sorunuzdaki hata ortaya çıkıyor:

>>> 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

Kodunuzu tam geri izleme göstermediğiniz sürece kodunuzun nedeninin nerede olduğunu söylemek zor.


5
Bu, nedenin soruya dahil olmadığını doğrular.
ElmoVanKielmo

Bir dahaki sefere izlemeyi kopyalayacağım için teşekkür ederim, ancak şablon etiketi ile gerçekleştiğinde, uwsgi yeniden başlatıldıktan hemen sonra, sonuç düzgün görüntülendi, bu yüzden sonuç vardı
user2575627

2
@ user2575627, Neden kodu / geri izlemeyi şimdi göndermiyorsunuz? Sorunuzu güncelleyin (düzenleyin).
falsetru

Üzgünüz, hizmeti onarmak / düzeltmek için acil olduğu için kod / traceback yayınlamadım, bu yüzden ilk kez geri izleme kopyalamadım
user2575627 15:13

@ user2575627, /home/name/workspace/project/app/data/commands/my_command.py 60 numaralı satıra kod gönderebilir misiniz?
falsetru

18

Url () işlevine bir anahtar kelime bağımsız değişken adı iletmeyi unuttuğumda yukarıda belirtilen sorunla karşılaştım .

Hatalı kod

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

Hatasız kod

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

Sonunda yukarıdaki hatayı bu şekilde kaldırdım. Sizin durumunuzda farklı bir şey olabilir. URL'lerinizi urls.py ile kontrol edin .


1
2019 ve aynı stackoverflow cevap hala her zaman beni kurtarıyor
Long Nguyen

Evet, çok teşekkür ederim. SO gerçekten geliştiriciler, bilim adamları ve diğerleri için harika bir platform.
hygull

10

Çözüm"

Anahtar argüman geçirin adını görünümünüzü adı örneğin olarak değerle homeveya home-viewvb url()fonksiyonu.

Atar Hatası »

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

Doğru"

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


9

İşte çoğaltılan hata.

>>> 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
>>> 

Diziyi verirseniz ve herhangi bir eleman uzunluğu 1 ise ve iki tane gerekliyse, bu tür bir hata alırız. Yukarıdaki koda bakınız. Diziyi ilk kez tuple ile verdim ve uzunluğu 1, sonra hatayı aldık ve sözlük güncellenmedi. iki elemanla birlikte tuple içinde ikinci kez verdiğimde sözlük güncellendi.


Shortucts.redirect kullanarak ve harici bir sayfaya yanıt göndermeye çalışıyorum aynı hatayı alıyorum .. eg '[code] return redirect (" msn.com") [/ code]
roblem

3

Aynı sorunu aldım ve bunun yanlış parametrelerden kaynaklandığını gördüm. İçinde views.pykullandım:

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

Ama sorunu bulduk: {'items', items}. İçin değiştirme {'items': items}düzeltilen sorunun.


2

Benim durumumda, benim get_context_datagörüşlerimden birinde dönen return render(self.request, 'es_connection_error.html', {'error':error});yerine bir dene / yakala bloğunda dönüyorducontext


2

Hata parametrelerde olmalıdır. Lütfen parametrelerin bir sözlük nesnesi olduğunu doğrulayın . Yalnızca bir liste / bağımsız değişken listesi *paramsise iki * ( **params) yerine yalnızca bir * ( ) kullanın . Bu listeyi / demetini uygun miktarda argüman olarak patlatacaktır.

Veya, params kodun başka bir bölümünden bir JSON dosyası olarak geliyorsa, lütfen yapın json.loads(params), çünkü JSON nesneleri bazen dize gibi davranır ve bu nedenle dize (yükler) yükünü kullanarak bir JSON olarak yapmanız gerekir.

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

Bu yardımcı olur umarım!


1

Güncelleme yöntemini yanlış türde bir parametre ile çağırmaya çalışırken bu sorunla karşılaştım. Beklenen karar şuydu:

{'foo': True}

Geçen kişi:

{'foo': "True"}

ilettiğiniz tüm parametrelerin beklenen türde olduğunu kontrol ettiğinizden emin olun.


0

Bir parametreyi yanlış gönderiyorsunuz; şöyle olmalıdır dictionary object:

  • Yanlış: func(a=r)

  • Doğru: func(a={'x':y})


0

Ben de benzer bir sorun yaşadım. Çözüm basit. değerlere NULL veya None değeri girmeye çalışmayın veya u Böyle bir şey kullanmak zorunda kalabilirsiniz
dic.update([(key,value)])

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.