176 votes

Python: le moyen le plus idiomatique de convertir None en chaîne vide?

Quelle est la manière la plus idiomatique de procéder comme suit?

 def xstr(s):
    if s is None:
        return ''
    else:
        return s

s = xstr(a) + xstr(b)
 

update: j'intègre la suggestion de Tryptich d'utiliser str (s), ce qui permet à cette routine de fonctionner pour d'autres types que les chaînes. Je suis terriblement impressionné par la suggestion Lambda de Vinay Sajip, mais je veux garder mon code relativement simple.

 def xstr(s):
    if s is None:
        return ''
    else:
        return str(s)
 

156voto

SilentGhost Points 79627
def xstr(s):
    return '' if s is None else str(s)

147voto

dorvak Points 1202

Probablement le plus court serait str(s or '')

Parce que None est False et "x ou y" renvoie y si x est false. Voir Opérateurs booléens pour une explication détaillée. C'est court, mais pas très explicite.

103voto

Triptych Points 70247

Si vous voulez réellement que votre fonction se comporte comme les commandes intégrées str() , mais renvoie une chaîne vide lorsque l'argument est Aucun, procédez comme suit:

 def xstr(s):
    if s is None:
        return ''
    return str(s)
 

102voto

Vinay Sajip Points 41286

Si vous savez que la valeur sera toujours une chaîne ou None:

 xstr = lambda s: s or ""

print xstr("a") + xstr("b") # -> 'ab'
print xstr("a") + xstr(None) # -> 'a'
print xstr(None) + xstr("b") # -> 'b'
print xstr(None) + xstr(None) # -> ''
 

63voto

Alex Martelli Points 330805

return s or '' fonctionnera parfaitement pour votre problème déclaré!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X