Python / str() / Convertir un objet en chaîne de caractères

str() renvoie une représentation lisible d’un objet sous forme de chaîne en Python. Utilisez-la pour associer nombres et texte ou conserver une représentation textuelle : le type de l’objet initial ne change pas. Décoder des octets ou produire du JSON nécessite une opération adaptée.

Conversion simple et type retourné

str(object) renvoie un objet str, par exemple à partir d’un nombre ou d’un booléen. Sans argument, str() crée une chaîne vide. La conversion utilise normalement __str__(), qu’une classe personnalisée peut définir. Consultez la référence officielle du type str.

Les exemples nécessitent uniquement Python 3 et sa bibliothèque standard. Enregistrez ce programme complet en UTF-8 dans str_example.py puis lancez python str_example.py dans un terminal. Certaines installations utilisent python3. Chaque exemple suivant est indépendant : remplacez le contenu du même fichier pour l’exécuter.

number = 42
text = str(number)
print(number, type(number).__name__)
print(text, type(text).__name__)
print("ID-" + text)
print(repr(str()))
print(str(None))

Résultat attendu :

42 int
42 str
ID-42
''
None

Les deux valeurs affichent 42, mais leur type diffère. number reste un entier et text est une chaîne. '', affiché avec repr(), a une longueur nulle. str(None) produit en revanche le texte None.

Distinguer conversion et formatage numérique

str() produit la représentation de base du nombre, sans imposer de décimales ni de format monétaire. Utilisez une chaîne formatée, par exemple une f-string, pour une règle d’affichage précise.

price = 12.5
print(str(price))
print(f"{price:.2f}")
print("price=" + str(price))
12.5
12.50
price=12.5

12.50 est une chaîne affichée avec deux décimales. Le nombre price initial reste inchangé. Arrondir l’affichage et assurer la précision du calcul sont deux questions distinctes.

Décoder bytes pour obtenir du texte

bytes contient des octets, tandis que str contient du texte Unicode. str(raw) seul donne la représentation de l’objet bytes. Pour retrouver les caractères, indiquez l’encodage réel avec decode() ou 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é

Le préfixe b et les échappements de la première ligne représentent les octets. Les deux lignes suivantes les décodent en UTF-8. Si le fichier ou la réponse utilise un autre encodage, indiquez celui-ci. Employer errors="ignore" seulement pour masquer une erreur peut supprimer des données.

Choisir str(), repr() ou JSON

str() sert surtout à l’affichage lisible, et repr() à examiner une représentation pendant le développement. Même repr() ne garantit pas un code reconstructible pour tous les objets. Pour l’échange de données, utilisez json.dumps() : JSON, JavaScript Object Notation, est un format textuel standard.

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'

Le résultat de str() pour le dictionnaire emploie les guillemets Python et True : ce n’est pas automatiquement du JSON. Une nouvelle ligne dans la chaîne est réellement affichée par str(), alors que repr() montre un échappement tel que \n.

Remplacer uniquement None par du texte vide

Utilisez is None si seule la valeur absente None doit devenir vide. str(value or "") transforme aussi 0 et False en texte vide et peut faire perdre leur sens.

for value in (None, 0, False):
    text = "" if value is None else str(value)
    print(repr(text))
''
'0'
'False'

Traiter les erreurs de concaténation et de décodage

Un + direct entre chaîne et nombre provoque TypeError. Convertissez le nombre avec str() ou utilisez une f-string. Des octets incompatibles avec l’encodage choisi provoquent UnicodeDecodeError : vérifiez l’encodage d’origine et l’intégrité des données.

try:
    print("ID-" + 42)
except TypeError:
    print("TypeError")

try:
    str(b"\xff", "utf-8")
except UnicodeDecodeError:
    print("UnicodeDecodeError")
TypeError
UnicodeDecodeError

Le dernier exemple intercepte les exceptions pour en montrer le type. Une conversion peut aussi échouer si une méthode __str__() personnalisée retourne le mauvais type ou lève une exception. Toute erreur n’est donc pas une simple concaténation incorrecte.