根据错误栈可知错误源头是ValueError,int( )函数对字符串中的浮点数无法处理,所以在str2num(s)中尝试捕获ValueError错误,若捕获到就用float( )去处理。
from functools import reduce def str2num(s): try: return int(s) except ValueError: return float(s) def calc(exp): ss = exp.split('+') ns = map(str2num, ss) return reduce(lambda acc, x: acc + x, ns) def main(): r = calc('100 + 200 + 345') print('100 + 200 + 345 =', r) r = calc('99 + 88 + 7.6') print('99 + 88 + 7.6 =', r) main()
Sign in to make a reply
Macyrate
根据错误栈可知错误源头是ValueError,int( )函数对字符串中的浮点数无法处理,所以在str2num(s)中尝试捕获ValueError错误,若捕获到就用float( )去处理。