如何验证一个字符串是否为有效的浮点数?

3

我想要做的是验证一个字符串是否为数字--浮点数--但我没有找到一个可以做到这一点的字符串属性。也许并没有这样的属性。我对这段代码有问题:

N = raw_input("Ingresa Nanometros:");
if ((N != "") and (N.isdigit() or N.isdecimal())):
    N = float(N);
    print "%f" % N;

正如你所看到的,我需要提取数字,包括十进制和浮点数。 N.isdecimal() 无法解决我的问题。


4
Python 的口号是“宁求原谅,不要征得许可”。尝试运行代码,并在出错时捕获异常。 - Gareth Latty
1
如果想知道为什么你的代码不工作:“N.isdigit()”是真的,如果N中的每个字符都是数字。这对于3.14来说是不正确的。你在问“每个字符是否都是数字,或者每个字符都是小数点?”而你想要问的是“每个字符都是数字或小数点”,可以写成all(ch.isdigit() or ch.isdecimal() for ch in N)。当然,这仍然不能针对例如-3.14或其他完全有效的floats。这就是“宁可问候不要批准”的许多原因之一——但了解isdigit`仍然是值得的。 - abarnert
1个回答

10
try:
    N = float(N)
except ValueError:
    pass
except TypeError:
    pass

这会尝试将N转换为float。但是,如果不可能(因为它不是数字),它将pass(什么都不做)。

我建议您阅读关于try and except blocks的文章。

您也可以这样做:

try:
    N = float(N)
except (ValueError, TypeError):
    pass

1
如果 NNone,那么你会得到 TypeError 并且你的代码会崩溃。使用 float(N or '') - Yevgen Yampolskiy
@YevgenYampolskiy 噢,没错。我加了 except TypeError 来避免这种情况。 - Rushy Panchal
3
except (ValueError, TypeError) as e: pass 至少可以译为:在遇到 ValueError 或者 TypeError 异常时,将其捕获并赋值给变量 e,执行空语句。 - Jon Clements
嘿!非常感谢,这解决了我的问题。我是一名 ANSI C 和 ASM 程序员,但我非常喜欢 Python :D - p1r0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接