为什么Python的eval(输入(“输入输入:”))会改变输入的数据类型?

时间:2016-06-19 19:07:26

标签: python eval type-conversion

在Python 3中,我编写了一个简单的命令来接受用户的整数输入:

x = int(input("Enter a number: "))

如果我跳过int()部分并只使用x = input("Enter a number: "),我输入的数据类型是字符串,而不是整数。我明白了。

但是,如果我使用以下命令:

x = eval(input("Enter a number: "))

输入的数据类型为'int'。

为什么会这样?

2 个答案:

答案 0 :(得分:6)

  

为什么会这样?

x = eval(input("Enter a number: "))x = eval('input("Enter a number: ")')

不同

前者首先调用input(...),获取一个字符串,例如'5'然后评估它,这就是为什么你以这种方式获得int的原因:

>>> eval('5') # the str '5' is e.g. the value it gets after calling input(...)
5 # You get an int

虽然后者(更符合您的期望),但评估表达式'input("Enter a number: ")'

>>> x = eval('input("Enter a number: ")')
Enter a number: 5
>>> x 
'5' # Here you get a str

答案 1 :(得分:0)

因为数字是Python中的有效表达式,并且它的计算结果为自身(并且其类型为int)。例如,如果输入带有不存在名称的垃圾字符串(例如,' abcdefgh'),将引发NameError异常(评估时引发异常)。