如何验证字符串是否是有效的浮点数?
我想要做的是验证一个字符串是否是数字 - 一个浮点数 - 但我还没有找到一个字符串属性来做到这一点。也许没有一个。我有一个问题与此代码:如何验证字符串是否是有效的浮点数?
N = raw_input("Ingresa Nanometros:");
if ((N != "") and (N.isdigit() or N.isdecimal())):
N = float(N);
print "%f" % N;
正如你所看到的,我需要的是只取数字,十进制或浮动。 N.isdecimal()
不能解决我心中的问题。
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
如果'N'是'None',那么你会得到'TypeError',你的代码将会爆炸。使用'float(N或'')' – 2013-02-19 02:15:19
@YevgenYampolskiy啊,那是真的。我加入'除了TypeError'以避免这种情况。 – 2013-02-19 02:18:15
'除了(ValueError,TypeError)as e:pass'至少 – 2013-02-19 02:30:14
Python的口头禅是*“请求原谅,而不是许可。” * - 尝试它,捕捉到的异常,如果它出错。 – 2013-02-19 02:11:38
如果你想知道你的代码为什么不起作用:如果'N'中的每个字符都是数字,则'N.isdigit()'为真。对于'3.14'来说不是这样。你问:“每个字符都是数字,还是每个字符都是小数?”当你想要问“每个字符是一个数字还是一个小数”时,它将被拼写为'all(ch.isdigit()或ch.isdecimal()for ch in N)'。当然,这对于例如'-3.14'或其他完全有效的'float'来说仍然不起作用。这是“容易要求宽恕而不是权限”的许多原因之一,“这是做到这一点的一种方式” - 但它仍然值得理解“isdigit”。 – abarnert 2013-02-19 02:29:48