标识输入的数据类型

问题描述 投票:5回答:4

嗨,我正在尝试打印用户输入的数据类型并生成一个如下表:

ABCDEFGH =字符串, 1.09 =浮点,0 =整数,true =布尔值

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

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

始终返回字符串的str。感谢任何帮助

python python-3.x types user-input python-3.2
4个回答
9
投票
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'>

4
投票

input()将始终返回字符串。如果要查看是否可以将其转换为整数,则应该执行以下操作:

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


2
投票

输入将始终返回字符串。您需要评估字符串以获取一些Python值:

ast.literal_eval

如果需要安全性(用户可以在此处执行任意代码),则应使用>>> 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

0
投票

这里的问题是任何输入都取一个'字符串'。因此,我们需要将“字符串”视为特殊情况,并将其与其他所有内容分开。

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

这里首先评估输入。如果不是字符串,则eval函数应显示类型。如果它是字符串,则将其视为“错误”,并且错误消息将显示为“ That is a string”。

© www.soinside.com 2019 - 2024. All rights reserved.