エラー:「辞書更新シーケンス要素#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 2013

コメントとして追加します。タプルの代わりにリストを使用したため、エラーが発生しました。これは、エラーが発生します。dict(['A',"b"])これはそうではないdict([('A',"b")])
NelsonGon

回答:


397

ちょうどこの問題に遭遇しました。それがあなたのコードに影響を与えたのと同じことかどうかはわかりませんが、根本的な原因はname=url(またはpathDjango 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は指定された位置引数をキーワード引数として解析したいためですkwargs。また、文字列は反復可能であるため、非定型のコードパスが展開し始めます。常にname=あなたのURLで使用してください!


40
この回答は、理解するのが難しい不明瞭なエラーをカバーしているため、非常に良い回答です。経験豊富なDjango開発者でさえ、この特定の罠に陥る可能性があります。
グラレイン

4
特にRouter.register、Django RestFramework のメソッドも使用する場合。それは非常によく似ています、違いはnameクワルグです...
リサディーニャ2016

4
まあそれは二度と戻ってくることのない非生産的に過ごした30分です。tnx。
Iman Akbari

2
鮮やかさ!正確に私が忘れたもの:S
rschwieb

2
ちなみに、Django 2.0スタイルのpathURL を使用してこのエラーを受け取りました。kwargを使用するのを忘れて、これがありました:path('foo/', views.foo, 'foo')。私は変更しなければなりpath('foo/', views.foo, name='foo')
ませんでし

38

文字列と辞書をいじっていると、このエラーが発生しました。

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

文字列から辞書を取得するために実際に行う必要があるのは次のとおりです。

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 2013

私はトレースバックをコピーします答え次回のおかげで、それはそれはテンプレートタグで起こったとき、ちょうどuwsgi再起動後、結果が正しく表示され、その結果があった、奇妙だ
user2575627

2
@ user2575627、今すぐコード/トレースバックを投稿してみませんか?質問を更新(編集)します。
falsetru 2013

サービスを修復/修正することが急務だったため、コード/トレースバックを投稿しなかったため、最初にトレースバックをコピーしませんでした
user2575627

@ user2575627、/ home / name / workspace / project / app / data / commands / my_command.py行60の周りにコードを投稿できますか?
falsetru 2013

18

キーワード引数をurl()関数に渡すのを忘れたとき、私は上記の問題に直面しました。

エラーのあるコード

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

エラーなしのコード

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

最後に、この方法で上記のエラーを削除しました。それはあなたのケースでは何か違うかもしれません。したがって、urls.pyで URLパターンを確認してください。


1
2019と同じstackoverflowの答えは毎回私を救います
Long Nguyen

うん、ありがとうv。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の場合、エラーが発生し、辞書は更新されません。2つの要素を含む内部タプルを2回与えたとき、辞書が更新されました。


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ビューの1つは、返さreturn render(self.request, 'es_connection_error.html', {'error':error});れるのではなく、try / catchブロックで返されていましたcontext


2

エラーはパラメータにあるはずです。 paramsが辞書オブジェクトであることを確認してください。引数のリスト/タプルだけの場合は*params、2 つの*()ではなく1つの*()のみを使用します**params。これにより、リスト/タプルが適切な数の引数に分解されます。

または、paramsがJSONファイルとしてコードの他の部分から来ている場合は、 json.loads(params)。JSONオブジェクトは文字列として動作する場合があるため、文字列からのロード(ロード)を使用してJSONにする必要があるためです。

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

お役に立てれば!


1

間違ったタイプのパラメーターで更新メソッドを呼び出そうとしたときに、この問題が発生しました。予想される口述は:

{'foo': True}

合格したのは:

{'foo': "True"}

渡すすべてのパラメーターが想定されたタイプであることを確認してください。


0

1つのパラメーターを誤って送信しています。それはdictionary object

  • 違う: func(a=r)

  • 正しい: func(a={'x':y})


0

私も同様の問題を抱えていました。解決策は簡単です。値にNULLまたはなしの値を入力しないでください。または、次のようなものを使用する必要があります。
dic.update([(key,value)])

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.