TypeError: ожидаемая строка compile() без нулевых байтов

Я пытаюсь перевести строку с помощью Google Translate API.

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import sys
import urllib
import urllib2

import ast


url = 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q='+urllib.quote(' '.join(sys.argv[3:]))                   +'&langpair='+sys.argv[1]+'%7C'+sys.argv[2] 
print url

transtext =urllib2.urlopen(urllib2.Request(url)).read()
content=ast.literal_eval(transtext)

print  content['responseData']['translatedText']

python testURL.py привет en '' '

это URL, указанный.

http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%E0%A4%A8%E0%A4%AE%E0%A4%B8%E0%A5%8D%E0%A4%A4%E0%A5%87&langpair=hi%7Cen Если мы проверим приведенный выше URL, мы увидим, что вывод Hello

{"responseData": {"translatedText":"Hello"}, "responseDetails": null, "responseStatus": 200}

это строковый формат, поэтому я пытаюсь преобразовать его в формат словаря с помощью ast.literal_eval, а затем обработать данные в словаре по содержимому ['responseData']['translationText'], но возникает следующая ошибка

Ошибка:

    content=ast.literal_eval(transtext)
  File "/usr/lib/python2.6/ast.py", line 49, in literal_eval
    node_or_string = parse(node_or_string, mode='eval')
  File "/usr/lib/python2.6/ast.py", line 37, in parse
    return compile(expr, filename, mode, PyCF_ONLY_AST)
TypeError: compile() expected string without null bytes

Python версии 2.6 и ОС Ubuntu 9.10

2 ответа

Решение

Ответ вы получите в формате JSON. Попробуйте использовать модуль json, который входит в состав Python 2.6.

literal_eval ожидает представления Python, которые не включают ноль. Это JSON, так что используйте json.loads(transtext)

Другие вопросы по тегам