font - Error de Python3: initial_value debe ser str o None
plot title font size matplotlib (2)
Mientras python2
código de python2
a 3
, python2
este error cuando leo desde una URL
TypeError: initial_value debe ser str o None, no bytes.
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())
La excepción se arroja a esta línea
buf = StringIO(response.read())
Si uso python2, funciona bien.
Esto se parece a otro problema python3 bytes
vs. str
. Su respuesta es de tipo bytes
(que es diferente en python 3 de str
). Primero debe introducirlo en una cadena usando response.read().decode(''utf-8'')
say y luego usar StringIO
en él. O puede usar BytesIO
como alguien dijo, pero si espera que sea str
, la forma preferida es decode
primero en str
.
response.read()
devuelve una instancia de bytes
mientras StringIO
es una secuencia en memoria para texto solamente. Use BytesIO
en BytesIO
lugar.
De lo nuevo en Python 3.0 - Texto vs. Datos en lugar de Unicode vs. 8 bits
Los módulos
StringIO
ycStringIO
se han ido. En su lugar, importe el móduloio
y useio.StringIO
oio.BytesIO
para texto y datos, respectivamente.