如何将可以表示十进制或有理数的字符串转换为浮点数
>>> ["0.1234", "1/2"] ['0.1234', '1/2']
我想要[0.1234,0.5].
eval是我的想法,但没有运气:
>>> eval("1/2") 0
Ryan.. 17
如果转换失败,我会解析字符串:
>>> def convert(s): try: return float(s) except ValueError: num, denom = s.split('/') return float(num) / float(denom) ... >>> convert("0.1234") 0.1234 >>> convert("1/2") 0.5
通常使用eval是一个坏主意,因为它存在安全风险.特别是如果被评估的字符串来自系统外部.
如果转换失败,我会解析字符串:
>>> def convert(s): try: return float(s) except ValueError: num, denom = s.split('/') return float(num) / float(denom) ... >>> convert("0.1234") 0.1234 >>> convert("1/2") 0.5
通常使用eval是一个坏主意,因为它存在安全风险.特别是如果被评估的字符串来自系统外部.
正如其他人所指出的那样,使用eval
可能存在安全风险,当然也是一种不良习惯.(如果你不认为这是有风险的exec
,想象的eval
荷兰国际集团这样的:__import__('os').system('rm -rf /')
)
但是,如果你有python 2.6或更高版本,你可以使用ast.literal_eval
,为其提供的字符串:
可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None.
因此它应该是相当安全的:-)
另一个选项(也仅适用于2.6及以上)是fractions
模块.
>>> from fractions import Fraction >>> Fraction("0.1234") Fraction(617, 5000) >>> Fraction("1/2") Fraction(1, 2) >>> float(Fraction("0.1234")) 0.1234 >>> float(Fraction("1/2")) 0.5