如何在Python 2.7中检查字符串是否为整数或浮点数

4

我知道类似的问题以前已经有人问过并得到了回答,比如这里:如何在Python中检查字符串是否为数字(浮点数)?

然而,它并没有提供我所需要的答案。我要做的是:

def main():
    print "enter a number"
    choice = raw_input("> ")
    # At this point, I want to evaluate whether choice is a number.
    # I don't care if it's an int or float, I will accept either.

    # If it's a number (int or float), print "You have entered a number."
    # Else, print "That's not a number."
main()

大多数问题的答案建议使用try..except,但这只允许我评估int或floats,即

def is_number(s):
    try:
        float(choice)
        return True
    except ValueError:
        return False

如果我使用这段代码,整数值将最终出现在异常中。
我看到的其他方法包括str.isdigit。然而,这会返回True(对于整数)和False(对于浮点数)。

2
float('123') 返回 123.0,不会出现 ValueError。因此你的函数运行良好。 - Remi Guan
2
“如果我使用这段代码,整数值将最终出现在异常中” - 不行。在询问之前请确实尝试这些事情。 - jonrsharpe
谢谢大家的澄清。在询问之前,我确实尝试过那种方法,但是我无法让它起作用。可能是哪里犯了一个错误。无论如何,现在它像你们说的一样正常工作了。谢谢!! - wcj
这回答解决了您的问题吗: 检查变量是否为整数 Thomas - Thomas
解决方案:https://stackoverflow.com/a/64132078/8321339 - Vishal Gupta
5个回答

4

在你的情况下,只需要在try / except块中检查输入是否可以转换为浮点数即可。该转换对于任何可以转换为整数的字符串都将成功。


2

你使用的函数应该可以将字符串形式的整数和浮点数成功转换为浮点数。如果出于某种原因,你想要确定它是整数还是浮点数,请考虑进行以下更改。

def is_int_or_float(s):
    ''' return 1 for int, 2 for float, -1 for not a number'''
    try:
        float(s)

        return 1 if s.count('.')==0 else 2
    except ValueError:
        return -1
print is_int_or_float('12')
print is_int_or_float('12.3')
print is_int_or_float('ads')

这里是结果

python test.py
1
2
-1

1

你可以编写自己的函数,

def is_int_or_float(a):
    if type(a) is int or type(a) is float:
        return True
    else:
       return False

你可以编写更加紧凑的程序。但请自行完成。谢谢!

0

我知道这已经过时了,但我做了一个简单的检查:

    var = 3

    try: #if it can be converted to a float, it's true
        float(var) 
    except: # it it can't be converted to a float, it's false
        do stuff with the var 

0
你可以使用 isstance() 方法和 literal_eval。
例如:
from ast import literal_eval

   isinstance(literal_eval('3'),int)

返回

True

或者您可以使用 JSON。

import json

isinstance(json.loads('3'),int)

返回

True

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