Identifying the data type of an input

前端 未结 4 802
醉梦人生
醉梦人生 2020-12-02 00:36

Hi I am trying to print the data type of a user input and produce a table like following:

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

相关标签:
4条回答
  • 2020-12-02 00:55

    input() will always return a string. If you want to see if it is possible to be converted to an integer, you should do:

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

    You could write a function like this:

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

    However, as mentioned in the other answers, using ast.literal_eval would be a more concise solution.

    0 讨论(0)
  • 2020-12-02 00:55

    The problem here is that any input is taken a 'string'. So we need to treat 'string' as a special case, and keep it separate from everything else.

    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")
    

    Here the input is first evaluated. If it's anything other than a string, the eval function shall show the type. If it's a string, it is considered as an "error", and the error message is given as "That is a string".

    0 讨论(0)
  • 2020-12-02 01:00

    Input will always return a string. You need to evaluate the string to get some Python value:

    >>> 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'>
    

    If you want safety (here user can execute arbitrary code), you should use ast.literal_eval:

    >>> import ast
    >>> type(ast.literal_eval(raw_input()))
    342
    <type 'int'>
    >>> type(ast.literal_eval(raw_input()))
    "asd"
    <type 'str'>
    
    0 讨论(0)
  • 2020-12-02 01:13
    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'>
    
    0 讨论(0)
提交回复
热议问题