Если вы хотите преобразовать «локализованные» числа, такие как американская форма «2 147 483 647», вы можете использовать функцию atof()
из модуля locale . Пример:
import locale
locale.setlocale(locale.LC_NUMERIC, 'en_US')
print locale.atof('1,234,456.23') # Prints 1234456.23
Что касается дробей, Python теперь обрабатывает их напрямую (начиная с версии 2.6); они даже могут быть построены из строки:
from fractions import Fraction
x = Fraction('1/4')
print float(x) # 0.25
Таким образом, вы можете проанализировать число, написанное любым из первых трех способов, которые вы упомянули, только с помощью двух вышеупомянутых стандартных модулей:
try:
num = float(num_str)
except ValueError:
try:
num = locale.atof(num_str)
except ValueError:
try:
num = float(Fraction(num_str))
except ValueError:
raise Exception("Cannot parse '%s'" % num_str) # Or handle '42 billion' here
# 'num' has the numerical value of 'num_str', here.