

現在、Djangoフレームワークを使ってserverを立ち上げています。  
ところが、昨日から次のエラーが出てしまうようになりました。

[code]

    File "/usr/local/lib/python3.6/site-packages/redis/_compat.py", line 123, in iteritems
        return iter(x.items())
    AttributeError: 'float' object has no attribute 'items'
    
[/code]

一体何が問題でどうしたら解決できるのかわかりません。  
対応方法がわかる方、あるいは想像できる方、ご教示ください。  
よろしくお願いします。

環境は、次のとおりです。  
Python:3.6  
Django:2.0.1  
redis:2.0

ログの全部はこちらになります。

[code]

    ********@ubuntu:~/********/abcdefghijk$ docker logs -f *********
    /usr/local/lib/python3.6/site-packages/celery/platforms.py:796: RuntimeWarning: You're running the worker with superuser privileges: this is
    absolutely not recommended!
    
    Please specify a different user using the --uid option.
    
    User information: uid=0 euid=0 gid=0 egid=0
    
      uid=uid, euid=euid, gid=gid, egid=egid,
    [2018-12-06 18:52:48,932: CRITICAL/MainProcess] Unrecoverable error: AttributeError("'float' object has no attribute 'items'",)
    Traceback (most recent call last):
      File "/usr/local/lib/python3.6/site-packages/celery/worker/worker.py", line 205, in start
        self.blueprint.start(self)
      File "/usr/local/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start
        step.start(parent)
      File "/usr/local/lib/python3.6/site-packages/celery/bootsteps.py", line 369, in start
        return self.obj.start()
      File "/usr/local/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 322, in start
        blueprint.start(self)
      File "/usr/local/lib/python3.6/site-packages/celery/bootsteps.py", line 119, in start
        step.start(parent)
      File "/usr/local/lib/python3.6/site-packages/celery/worker/consumer/consumer.py", line 598, in start
        c.loop(*c.loop_args())
      File "/usr/local/lib/python3.6/site-packages/celery/worker/loops.py", line 91, in asynloop
        next(loop)
      File "/usr/local/lib/python3.6/site-packages/kombu/asynchronous/hub.py", line 354, in create_loop
        cb(*cbargs)
      File "/usr/local/lib/python3.6/site-packages/kombu/transport/redis.py", line 1040, in on_readable
        self.cycle.on_readable(fileno)
      File "/usr/local/lib/python3.6/site-packages/kombu/transport/redis.py", line 337, in on_readable
        chan.handlers[type]()
      File "/usr/local/lib/python3.6/site-packages/kombu/transport/redis.py", line 724, in _brpop_read
        self.connection._deliver(loads(bytes_to_str(item)), dest)
      File "/usr/local/lib/python3.6/site-packages/kombu/transport/virtual/base.py", line 983, in _deliver
        callback(message)
      File "/usr/local/lib/python3.6/site-packages/kombu/transport/virtual/base.py", line 632, in _callback
        self.qos.append(message, message.delivery_tag)
      File "/usr/local/lib/python3.6/site-packages/kombu/transport/redis.py", line 149, in append
        pipe.zadd(self.unacked_index_key, time(), delivery_tag) \
      File "/usr/local/lib/python3.6/site-packages/redis/client.py", line 2263, in zadd
        for pair in iteritems(mapping):
      File "/usr/local/lib/python3.6/site-packages/redis/_compat.py", line 123, in iteritems
        return iter(x.items())
    AttributeError: 'float' object has no attribute 'items'
    
     -------------- celery@92783ffb867f v4.2.0rc4 (windowlicker)
    ---- **** ----- 
    ---  **  * -- Linux-4.4.0-112-generic-x86_64-with-debian-9.4 2018-12-06 18:34:29
    --  - *** --- 
    - ** ---------- [config]
    - ** ---------- .> app:         ********:0x7f85fb0d56d8
    - ** ---------- .> transport:   redis://redis:6379/0
    - ** ---------- .> results:     
    - ** ---  --- .> concurrency: 4 (prefork)
    -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
    --- ***** ----- 
     -------------- [queues]
                    .> default          exchange=default(direct) key=default
    
[/code]


CC BY-SA 4.0
2018-12-08T18:53:06.207
51048
2019-02-22T09:57:57.450
2019-02-22T09:57:57.450
19110
29110
question
python python3 django redis
Python3.6でAttributeError: 'float' object has no attribute 'items'


おそらく配列ではなくて配列の要素に対して何かしらの配列用メソッド（ループするなど）を適用してしまったのだと思います。配列の形を確認してください。エラーは[このコード](https://github.com/andymccurdy/redis-
py/blob/f1a1386b5799f5a2f731e25fe3473cb1118d5099/redis/_compat.py#L123)の部分で起きているように見えます。現状だとスタックトレースの最後の部分しか分からないので、もっと詳しいことはエラーメッセージを全部コピー＆ペーストして頂かないと分かりにくいと思います。


CC BY-SA 4.0
2018-12-09T00:48:09.783
51049
2018-12-09T00:48:09.783
19110
51048
answer


ログの最初には celery の名前がありますが、Pythonで、celery と redis
といえば非同期タスクですよね。タスクスケジュールやタスクスクリプトを重点的にデバックしたらどうでしょうか。

エラーの内容から考えると、よくやる失敗は、シーケンス型でないといけないところを、少数点数が1個だけだったので括弧を外してしまうとか、1個のタプルには末尾のカンマが必要なのにそれを忘れるとかが考えられます。昨日からエラーが出るようになったのであれば、その前に、Celeryのタスクスケジュール等を修正しませんでしたか。それともデータの方で変更はなかったでしょうか。

それでわからなければ、バグは思いがけない所にあるので、地道にテストをしていってください。


CC BY-SA 4.0
2018-12-09T12:54:59.203
51069
2018-12-09T12:54:59.203
15171
51048
answer