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
StringIOycStringIOse han ido. En su lugar, importe el móduloioy useio.StringIOoio.BytesIOpara texto y datos, respectivamente.