Python / str() / Convertir un objeto en una cadena
str() de Python devuelve una representación legible de un objeto como cadena. Sirve para unir números con texto o guardar una representación textual sin cambiar el tipo del objeto original. Decodificar bytes o generar JSON requiere operaciones específicas.
Conversión básica y tipo devuelto
str(object) devuelve un objeto str, por ejemplo a partir de números y booleanos. Sin argumentos, str() crea una cadena vacía. Normalmente utiliza la representación __str__(), que una clase personalizada puede definir. Consulta la referencia oficial del tipo str.
Solo necesitas Python 3 y su biblioteca estándar. Guarda el programa completo en UTF-8 como str_example.py y ejecuta python str_example.py en un terminal. Algunos entornos utilizan python3. Los ejemplos posteriores son independientes: sustituye el contenido del mismo archivo y ejecútalo de nuevo.
number = 42
text = str(number)
print(number, type(number).__name__)
print(text, type(text).__name__)
print("ID-" + text)
print(repr(str()))
print(str(None))
Resultado esperado:
42 int
42 str
ID-42
''
None
Ambos valores muestran 42, pero tienen tipos distintos. number sigue siendo un entero; text es una cadena. El '' mostrado con repr() tiene longitud cero. str(None) produce el texto None, no un valor vacío.
Conversión y formato numérico son diferentes
str() produce la representación básica de un número, sin fijar decimales ni formato monetario. Para una regla de visualización concreta, utiliza una cadena formateada, como una f-string.
price = 12.5
print(str(price))
print(f"{price:.2f}")
print("price=" + str(price))
12.5
12.50
price=12.5
12.50 es una cadena mostrada con dos decimales. El número original price no cambia. Redondear la visualización y mantener la precisión del cálculo son cuestiones distintas.
Decodificar bytes para obtener texto
bytes contiene datos en bytes y str contiene texto Unicode. str(raw) por sí solo produce la representación del objeto bytes. Para recuperar los caracteres, indica la codificación real mediante decode() o str(raw, encoding).
raw = "café".encode("utf-8")
print(str(raw))
print(raw.decode("utf-8"))
print(str(raw, "utf-8"))
b'caf\xc3\xa9'
café
café
El prefijo b y los escapes de la primera línea representan bytes. Solo las dos líneas siguientes los decodifican como UTF-8. Si el archivo o la respuesta utiliza otra codificación, emplea esa. Poner errors="ignore" solo para ocultar errores puede descartar datos.
Elegir entre str(), repr() y JSON
str() se orienta a la presentación legible; repr() ayuda a inspeccionar la representación durante el desarrollo. Ni siquiera repr() garantiza código reconstruible para cualquier objeto. Para intercambiar datos usa json.dumps(), que genera JSON, JavaScript Object Notation, un formato de texto estándar.
import json
data = {"active": True, "count": 0}
print(str(data))
print(json.dumps(data))
print(str("hello\nworld"))
print(repr("hello\nworld"))
{'active': True, 'count': 0}
{"active": true, "count": 0}
hello
world
'hello\nworld'
El str() del diccionario usa comillas de Python y True, por lo que no debes asumir que sea JSON. Un salto de línea se imprime realmente con str(); repr() muestra una representación escapada como \n.
Convertir solo None en una cadena vacía
Comprueba is None si únicamente el valor ausente None debe quedar vacío. str(value or "") también vacía 0 y False, perdiendo su significado.
for value in (None, 0, False):
text = "" if value is None else str(value)
print(repr(text))
''
'0'
'False'
Resolver errores de concatenación y decodificación
Un + directo entre cadena y número genera TypeError. Convierte el número con str() o usa una f-string. Si los bytes no son válidos para la codificación elegida aparece UnicodeDecodeError: comprueba la codificación original y si los datos están completos.
try:
print("ID-" + 42)
except TypeError:
print("TypeError")
try:
str(b"\xff", "utf-8")
except UnicodeDecodeError:
print("UnicodeDecodeError")
TypeError
UnicodeDecodeError
El último ejemplo captura las excepciones para mostrar sus tipos. La conversión también puede fallar si un __str__() personalizado devuelve un tipo incorrecto o lanza una excepción internamente. No atribuyas todos los fallos a la concatenación.




