识别输入的数据类型

7 投票
4 回答
29872 浏览
提问于 2025-04-17 20:56

我想打印用户输入的数据类型,并生成一个像下面这样的表格:

ABCDEFGH = String
1.09 = float
0 = int
true = bool

等等。

我使用的是Python 3.2.3,我知道可以用 type() 来获取数据的类型,但在Python中,所有用户输入的内容都被当作字符串处理。我不知道怎么判断输入的是字符串、布尔值、整数还是浮点数。以下是代码的相关部分:

user_var = input("Please enter something: ")
print("you entered " + user_var)
print(type(user_var))

这段代码总是返回 str,表示它是字符串。

4 个回答

-1

这里的问题是,任何输入都被当作“字符串”来处理。所以我们需要把“字符串”当作一个特殊的情况,和其他的输入分开对待。

x = input("Enter something: ")

try:
    if type(eval(x)) == float:
        print(x, " is floating point number")
    elif type(eval(x)) == int:
        print(x, " is interger number")    
    elif type(eval(x)) == bool:
        print(x, " is a boolean")      
except:
    print("That is a string")

在这里,输入首先会被评估。如果输入不是字符串,eval函数会显示它的类型。如果输入是字符串,就会被视为“错误”,并给出错误信息:“那是一个字符串”。

1

输入总是会返回一个字符串。你需要对这个字符串进行评估,才能得到一些Python的值:

>>> type(eval(raw_input()))
23423
<type 'int'>
>>> type(eval(raw_input()))
"asdas"
<type 'str'>
>>> type(eval(raw_input()))
1.09
<type 'float'>
>>> type(eval(raw_input()))
True
<type 'bool'>

如果你想要安全一些(因为用户可以执行任意代码),你应该使用 ast.literal_eval

>>> import ast
>>> type(ast.literal_eval(raw_input()))
342
<type 'int'>
>>> type(ast.literal_eval(raw_input()))
"asd"
<type 'str'>
4

input() 函数总是会返回一个字符串。如果你想检查这个字符串是否可以转换成整数,你可以这样做:

try:
    int_user_var = int(user_var)
except ValueError:
    pass # this is not an integer

你可以写一个这样的函数:

def try_convert(s):
    try:
        return int(s)
    except ValueError:
        try:
            return float(s)
        except ValueError:
            try:
                return bool(s)
            except ValueError:
                return s

不过,正如其他回答提到的,使用 ast.literal_eval 会是一个更简洁的解决方案。

14

在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如,有人可能在使用某个工具或者编程语言时,碰到了错误或者不明白的地方。这时候,大家就会去一个叫StackOverflow的网站上提问,看看有没有人能帮忙。

在这个网站上,很多人会分享他们的经验和解决方案,帮助其他人解决问题。你可以把它想象成一个大社区,里面有很多热心的程序员,他们愿意分享自己的知识和技巧。

如果你在学习编程,遇到困难,不妨去看看这个网站,可能会找到你需要的答案哦!

from ast import literal_eval

def get_type(input_data):
    try:
        return type(literal_eval(input_data))
    except (ValueError, SyntaxError):
        # A string, so return str
        return str

print(get_type("1"))        # <class 'int'>
print(get_type("1.2354"))   # <class 'float'>
print(get_type("True"))     # <class 'bool'>
print(get_type("abcd"))     # <class 'str'>

撰写回答