сбой json.loads ()

1

Поэтому я работаю над проектом django, который использует очередь задач celery для создания HTTP-запросов.

В моем задании на сельдерей у меня есть:

json.loads('{"content-type": "application/json"}')
print test.headers
json.loads(test.headers)

Результат:

[2012-07-19 17:02:38,536: WARNING/PoolWorker-4] '{"content-type": "application/json"}'
[2012-07-19 17:02:38,569: ERROR/MainProcess] Task core.tasks.test_run[f304bcdd-72b3-4dd5-9abb-927dc29e7f65] raised exception: ValueError('No JSON object could be decoded',)
Traceback (most recent call last):
  File "/usr/local/bin/lib/python2.7/site-packages/celery/task/trace.py", line 212, in trace_task
    R = retval = fun(*args, **kwargs)     
  File "/opt/ironman_deploy/Ironman/core/tasks.py", line 18, in test_run
    json.loads(test.headers)
  File "/usr/local/bin/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/local/bin/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/bin/lib/python2.7/json/decoder.py", line 384, in raw_decode
    raise ValueError("No JSON object could be decoded")
No JSON object could be decoded: No JSON object could be decoded

Я в буквальном смысле понятия не имею, что происходит... ясно, что json может декодировать строку, потому что она не выдает 2 строки выше, однако, когда я передаю строку по ссылке, она, кажется, задыхается.

Может ли кто-нибудь пролить свет на это для меня?

Теги:
celery

2 ответа

1

test.headers может быть dict. Если вы распечатаете его, он выведет что-то похожее на JSON, но test.headers может вообще не быть JSON, и декодирование приведет к тому, что JSON задохнется.

  • 0
    Я запустил print type(test.headers) и получил <type 'str'>
  • 2
    Хорошо. Так что проверьте явно, равен ли test.headers '{"content-type": "application / json"}'. Если журнал говорит вам правду, так и должно быть. И затем, если это так, это какая-то странная ошибка, из-за которой одна и та же строка может быть загружена или нет в зависимости от того, где она хранится. Если это не так, и я держу пари, что это не так, в версии test.headers должен быть скрыт какой-то крошечный гремлин - что-то невидимое при печати. Не знаю: однажды я получил символ 0xA0, который выглядел как пробел (я потерял вечернее отслеживание этого!), И, как известно, более странные вещи существуют.
Показать ещё 1 комментарий
0

Что такое "test.headers", ваш фрагмент не указывает это. Если test.headers назначается на результат первого вызова json.loads, то второй из них будет obviosuly терпеть неудачу, поскольку вы не предоставляете ему строку. Второй вызов должен быть json.dumps(test.headers)

  • 0
    Выходные данные print test.headers показаны в первой строке второго фрагмента кода, в командной строке [2012-07-19 17:02:38,536: WARNING/PoolWorker-4] '{"content-type": "application/json"}' : [2012-07-19 17:02:38,536: WARNING/PoolWorker-4] '{"content-type": "application/json"}'
  • 0
    test.headers ли test.headers текст [2012-07-19 17:02:38,536: WARNING/Poolworder-4] ? Потому что если так, то JSON-декодер не будет счастлив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню