Python adore lever des exceptions, ce qui est généralement génial. Mais je suis confronté à des chaînes que je veux désespérément convertir en entiers en utilisant la sémantique atoi/atof de C - par ex. atoi de "3 sur 12", "3/12", "3/12", devraient tous devenir 3; atof ("3,14 secondes") devrait devenir 3.14; atoi ("-99 score") devrait devenir -99. Python a bien sûr des fonctions atoi et atof, qui ne se comportent pas comme atoi et atof et exactement comme les propres constructeurs int et float de Python.Python équivalent à atoi/atof
Le meilleur que j'ai à ce jour, ce qui est vraiment laid et difficile à étendre aux différents formats float disponibles:
value = 1
s = str(s).strip()
if s.startswith("-"):
value = -1
s = s[1:]
elif s.startswith("+"):
s = s[1:]
try:
mul = int("".join(itertools.takewhile(str.isdigit, s)))
except (TypeError, ValueError, AttributeError):
mul = 0
return mul * value
' atoi ("what about 2") 'devrait retourner' 0', car il commence par un 'w 'et' w' n'est pas un chiffre. – Quuxplusone