【发布时间】:2015-09-12 22:10:11
【问题描述】:
在将代码从 python2 移植到 3 时,从 URL 读取时出现此错误
TypeError:initial_value 必须是 str 或 None,而不是字节。
import urllib
import json
import gzip
from urllib.parse import urlencode
from urllib.request import Request
service_url = 'https://babelfy.io/v1/disambiguate'
text = 'BabelNet is both a multilingual encyclopedic dictionary and a semantic network'
lang = 'EN'
Key = 'KEY'
params = {
'text' : text,
'key' : Key,
'lang' :'EN'
}
url = service_url + '?' + urllib.urlencode(params)
request = Request(url)
request.add_header('Accept-encoding', 'gzip')
response = urllib.request.urlopen(request)
if response.info().get('Content-Encoding') == 'gzip':
buf = StringIO(response.read())
f = gzip.GzipFile(fileobj=buf)
data = json.loads(f.read())
在这一行抛出异常
buf = StringIO(response.read())
如果我使用python2,它可以正常工作。
【问题讨论】:
-
能否提供完整的追溯?
-
它只是给出这个错误并停止。 TypeError: initial_value 必须是 unicode 或 None,而不是 str
-
你能包含你的变量
url的值吗?当我尝试使用url = 'http://www.google.com'时,代码对我来说运行良好 -
对于因
pandas.read_csv()打嗝推断ASCII 输入的错误编码而来到这里的任何人,请使用encoding='utf8'或'latin1'强制它。
标签: python python-3.x urllib urllib2 stringio