TypeError: compile() 期望无空字节的字符串

6 投票
2 回答
16351 浏览
提问于 2025-04-16 08:17

我正在尝试使用谷歌翻译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 hi 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把它转换成字典格式,然后通过content['responseData']['translatedText']来访问字典中的数据,但出现了以下错误。

错误:

    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 个回答

3

literal_eval这个函数是用来处理Python中的数据表示的,但它不支持null这个值。如果你在处理的是JSON格式的数据,那就应该用 json.loads(transtext) 这个方法。

3

你得到的回复很可能是JSON格式的。可以试试使用Python 2.6自带的json模块。

撰写回答