Python любит создавать исключения, которые обычно велики. Но я сталкиваюсь с некоторыми строками, которые я отчаянно хочу преобразовать в целые числа, используя C atoi/atof semantics - например. atoi из "3 из 12", "3/12", "3/12", должны стать 3; atof ( "3,14 секунды" ) должно стать 3,14; atoi ( "-99 баллов" ) должно стать -99. Python, конечно, имеет atoi и atof функции, которые не ведут себя как atoi и atof и точно так же, как собственные конструкторы int и float Python.
Самое лучшее, что у меня есть до сих пор, которое действительно уродливо и трудно распространяться на различные доступные форматы float:
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