`iter_lines(decode_unicode=True, delimiter=<str>)` raises `TypeError` when `Response.encoding` is `None`

Abierto Apto para principiantes
#7,645 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

  • #1 de @draarivpatel-ui — cerrado sin fusionar

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python
Área
api

Línea de trabajo

El fallo está en iter_lines en src/requests/models.py, donde chunk.split(delimiter) recibe un delimitador de tipo str mientras el chunk es bytes porque Response.encoding es None. Ejecuta el fragmento de reproducción del issue para confirmar el TypeError y luego revisa cómo iter_lines decodifica los chunks cuando decode_unicode=True. Está terminado cuando la llamada devuelve líneas str o lanza un error claro, y se añade un test junto a los tests existentes de iter_lines. El pull request vinculado, cerrado y no fusionado, puede mostrar un intento anterior que conviene leer primero.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Expected Result

Either return lines, or raise a clear error message

I spotted this while investigating whether Pyrefly could run on the Requests source code. (happy to make a PR to add Pyrefly if you'd be interested in it by the way, it may avert future issues like this one? looks like only collaboratos can make PRs, so maybe not)

Actual Result

Unexpected error message:

[b'line one', b'line two', b'line three']
Traceback (most recent call last):
  File "/home/mgorelli/scratch/t.py", line 15, in <module>
    print(list(make_response().iter_lines(decode_unicode=True, delimiter="\n")))
          ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/mgorelli/scratch/.venv/lib/python3.14/site-packages/requests/models.py", line 1016, in iter_lines
    lines = chunk.split(delimiter)  # type: ignore[arg-type]
TypeError: a bytes-like object is required, not 'str'

Reproduction Steps

import io

import requests


def make_response():
    r = requests.models.Response()
    r.status_code = 200
    r.raw = io.BytesIO(b"line one\nline two\nline three")
    r.encoding = None  # e.g. a Content-Type with no charset
    return r


print(list(make_response().iter_lines(decode_unicode=True)))
print(list(make_response().iter_lines(decode_unicode=True, delimiter="\n")))

System Information

$ python -m requests.help
{
  "chardet": {
    "version": null
  },
  "charset_normalizer": {
    "version": "3.5.2"
  },
  "cryptography": {
    "version": ""
  },
  "idna": {
    "version": "3.20"
  },
  "implementation": {
    "name": "CPython",
    "version": "3.14.4"
  },
  "platform": {
    "release": "6.6.87.2-microsoft-standard-WSL2",
    "system": "Linux"
  },
  "pyOpenSSL": {
    "openssl_version": "",
    "version": null
  },
  "requests": {
    "version": "2.34.2"
  },
  "system_ssl": {
    "version": "30500060"
  },
  "urllib3": {
    "version": "2.8.0"
  },
  "using_charset_normalizer": true,
  "using_pyopenssl": false
}
Lenguaje dominante
Python
Estrellas
54.7k
Forks
10.8k
Merge medio
18 min
PR fusionados (30 d)
1

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de psf/requests

Todos los issues de psf/requests

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.