识别inpu的数据类型

2024-09-28 01:29:14 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正试图打印用户输入的数据类型并生成如下表格:

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

等等。 我使用的是Python3.2.3,我知道可以使用type()来获取数据的类型,但在python中,所有用户输入都被当作字符串,我不知道如何确定输入是字符串、布尔值、整数还是浮点值。这是代码的一部分:

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

它总是返回字符串的str。 感谢你的帮助


Tags: 字符串用户truestringvartypefloat表格
3条回答

输入将始终返回字符串。您需要对字符串求值以获取一些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'>
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'>

^{}将始终返回字符串。如果要查看是否可以转换为整数,应执行以下操作:

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将是一个更简洁的解决方案。

相关问题 更多 >

    热门问题