Поэтому я работаю над проектом 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 строки выше, однако, когда я передаю строку по ссылке, она, кажется, задыхается.
Может ли кто-нибудь пролить свет на это для меня?
test.headers может быть dict. Если вы распечатаете его, он выведет что-то похожее на JSON, но test.headers может вообще не быть JSON, и декодирование приведет к тому, что JSON задохнется.
Что такое "test.headers", ваш фрагмент не указывает это. Если test.headers назначается на результат первого вызова json.loads, то второй из них будет obviosuly терпеть неудачу, поскольку вы не предоставляете ему строку. Второй вызов должен быть json.dumps(test.headers)
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"}'
test.headers
ли test.headers
текст [2012-07-19 17:02:38,536: WARNING/Poolworder-4]
? Потому что если так, то JSON-декодер не будет счастлив.
print type(test.headers)
и получил<type 'str'>