`naturalsize()` raises `ValueError` for custom format strings with text
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 75/100
Línea de trabajo
Comienza en el punto de entrada naturalsize() e inspecciona el manejo del cambio de unidad introducido por el PR #329, especialmente la ruta de custom-format descrita en el informe. Añade cobertura de regresión para cadenas de formato con prefijos y sufijos, y luego ejecuta el conjunto de pruebas correspondiente; se considera terminado cuando estos formatos conservan el comportamiento anterior a 4.16, mientras el cambio de unidad sigue funcionando para los formatos numéricos simples.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Environment
- humanize 4.16.0 and current
mainat42b4a1db - Python 3.11.15
Reproduction
import humanize
print(humanize.naturalsize(999_999, gnu=True, format="Size: %.1f"))
humanize 4.15.0 returns:
Size: 976.6K
humanize 4.16.0 and current main raise:
ValueError: could not convert string to float: 'Size: 976.6'
Expected behavior
The documented custom formatter should continue to accept text around the numeric conversion.
Since this behavior worked in 4.15.0, preserving it would avoid a backward compatibility regression.
Cause
PR #329 added unit rollover handling. The new condition formats the mantissa with the
user-provided format and passes the entire result to float():
float(format % (abs_bytes / (base**exp)))
This works for a plain numeric format such as "%.1f", but not for a general formatter
such as "Size: %.1f".
Suggested fix
It might be preferable not to require the complete user-formatted result to be parseable as a float. One
backward-compatible option is to apply rollover only when the formatted result is a
plain numeric string, and otherwise preserve the pre-4.16 behavior. A more complete
solution could derive the rounded numeric mantissa independently from surrounding text.
It might also be worth adding a regression test covering both a prefix and a suffix.
How this was found
This was found by change-directed differential testing: reviewing the recent rollover change, mapping it to the public naturalsize() API, and constructing a documented custom formatter that reaches the newly added float(format % value) expression.
Related: #329, which fixes rollover but does not discuss custom format strings.
Thanks for taking the time to review this report! I appreciate all the work that goes into maintaining this project.
- Lenguaje dominante
- Python
- Estrellas
- 757
- Forks
- 148
- Merge medio
- 6 d 1 h
- PR fusionados (30 d)
- 12
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de python-humanize/humanize
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
python-humanize/humanize#379 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 52/100
python-humanize/humanize#356 · 2 comentarios ·
-
Percentages and ratios Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
python-humanize/humanize#277 · 1 comentario ·
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
python-humanize/humanize#270 · 6 comentarios ·
-
help wanted
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
python-humanize/humanize#263 · 3 reacciones ·
Todos los issues de python-humanize/humanize
Issues similares
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
canonical/paas-charm#368 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
tech debt
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
addition to tracking list Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
StevenBlack/hosts#3256 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
qualcomm/qai-appbuilder#275 ·