Python adora elevar excepciones, lo que generalmente es genial. Pero estoy enfrentando algunas cadenas que desesperadamente quiero convertir a enteros usando la semántica atoi/atof de C, por ej. atoi de "3 de 12", "3/12", "3/12", todos deben convertirse en 3; atof ("3.14 segundos") debería convertirse en 3.14; atoi ("puntuación de -99") debería convertirse en -99. Python por supuesto tiene funciones atoi y atof, que no se comportan como atoi y atof y exactamente como los propios constructores de int y float de Python.Python equivalente a atoi/atof
Lo mejor que tengo hasta ahora, que es muy feo y difícil de extender a los diferentes formatos de flotador 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 ("¿Qué pasa con 2") 'debe devolver' 0', ya que comienza con 'w 'y' w' no es un dígito. – Quuxplusone