Tengo un código de Python que recorre un archivo. Recibo un error UTF-8 (invalid continuation byte) cuando leo el archivo. Solo quiero que mi programa ignore eso.

Intenté usar un try, excepto alrededor del código dentro, pero eso no funcionará ya que el error está en la condición del bucle for. También intenté usar un try, excepto alrededor del ciclo, pero luego, cuando detecta el error, no vuelve a iniciar el ciclo.

with open(input_file_path, "r") as input_file:
    for line in input_file:
        # code irrelevant to question

Lo que sucede es que da este error en for line in input_file:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe0 in position 5: invalid continuation byte`

Quiero saltear esa línea y pasar a la siguiente. Esencialmente, un intento de detectar la condición de mi bucle for.

0
Sheshank S. 5 oct. 2019 a las 18:38

3 respuestas

La mejor respuesta

¿Esto funciona? (editado a la solución OP encontrado)

with open(input_file_path, "r", encoding="utf8", errors="surrogateescape") as input_file:
    for line in input_file:
        try:
            yourcode
        except:
            continue
2
chk 5 oct. 2019 a las 16:15

¿Has probado algo como esto? Cuando se genera UnicodeDecodeError, el bucle continuará con la próxima iteración.

with open(input_file_path, "rb") as input_file:
    for line in input_file:
        try:
            line_i = line.decode(encoding='utf-8')
        except UnicodeDecodeError:
            continue
0
BramAppel 5 oct. 2019 a las 15:50

Puede usar

with open(input_file_path, "r", encoding="ISO-8859-1") as input_file:
    for line in input_file:
0
Sudhansu Kumar 5 oct. 2019 a las 16:52
58249832