Python 3.x 如何获取用户已传递数据的对象的类型

Python 3.x 如何获取用户已传递数据的对象的类型,python-3.x,types,user-input,Python 3.x,Types,User Input,我在python中接受用户的输入,如何知道用户已传递int、string或float等 number1 = eval(sys.argv[1]) number2 = eval(sys.argv[2]) 如果用户传递的输入是float或int,我想求和,但如何知道用户传递的数据类型呢?因为用户传递的所有数据都是默认类型的字符串 有一些内置的方法: int() str() 例如,如果可能,转换,而type()告诉您它是什么: x = "Hi there" print(type(x)) y = 3

我在python中接受用户的输入,如何知道用户已传递int、string或float等

number1 = eval(sys.argv[1])
number2 = eval(sys.argv[2])

如果用户传递的输入是float或int,我想求和,但如何知道用户传递的数据类型呢?因为用户传递的所有数据都是默认类型的字符串

有一些内置的方法:

int()
str()
例如,如果可能,转换,而
type()
告诉您它是什么:

x = "Hi there"
print(type(x))

y = 3
print(type(y))
y = str(y)
print(type(y))
接收用户输入时,您可以尝试将其转换,如果成功,请使用转换结果:

_in = input("Some input please  ")

try:
    _in = int(_in)
except:
    try:
        _in = float(_in)
    except:
        pass

print(_in)
print(type(_in))

>>Some input please  3
>>3
>><class 'int'>

>>Some input please  3.5
>>3.5
>><class 'float'>
\u in=input(“请输入一些内容”)
尝试:
_in=int(_-in)
除:
尝试:
_in=浮动(_in)
除:
通过
打印(_in)
打印(键入(_-in))
>>请输入一些信息
>>3
>>
>>请输入一些3.5
>>3.5
>>

Python提倡“请求原谅,而不是许可”的方法。所有用户输入可能都是字符串-尤其是从
sys.argv
获取的字符串-但确定这一点的最佳方法是尝试将其编号(使用
try
/
除外),然后在失败时恢复为不同的行为

num1str, num2str = sys.argv[1], sys.argv[2]
try:
    # might as well do float, because every valid integer that can be represented in a 
    # string is also a valid float
    num1 = float(num1str)
    num2 = float(num2str)
    num3 = num1 + num2
except ValueError:  
    # this happens if the variable cannot be converted, e.g. the user entered something
    # that cannot be interpreted as a float
    ...
我们可以使用eval()来实现

import sys


def main():
    number1 = eval(sys.argv[1])
    number2 = eval(sys.argv[2])
    print(number1 + number2)


if __name__ == '__main__':
    main()
当用户输入一个整数作为输入时,input()函数返回一个字符串,但在eval()的情况下,它会将返回的值从字符串计算为整数,在float中也是如此。无需每次都检查数据类型

请参阅下面链接的第三个数字


但是在python3中,用户输入默认为字符串,那么如何知道用户输入的字符串值或int或float值。您可以尝试转换它,如果成功,则处理结果。我会更新我的答案。如果输入是字符串,那么??所有的时间我都要申请,如果不是这样的话。。。对基于其内在值,输入不会神奇地变成非字符串。您可以像我上面所做的那样(当您特别需要一个数字作为输入时,它应该可以很好地工作),或者您可以使用
re
将输入字符串与regex匹配,但这将与逻辑开关(ála if/else,try/except等)一样,“每个有效的整数……也是一个有效的浮点”但值得指出的是,它们的精确度并不相同。Python浮点在大约16位十进制数字时失去精度<代码>浮动('12345678901234567')!=例如,int('12345678901234567')