我正在尝试以下函数:
x = eval(input())
输入123并将变量x的类型设置为int
时,它可以正常工作:
In [22]: x=eval(input("enter:"))
enter:123
In [24]: print(type(x))
<class 'int'>
但是当输入为abcd时,它会抛出错误:
In [26]: x=eval(input("enter:"))
enter:abcd
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-26-fb0be0584c85> in <module>()
----> 1 x=eval(input("enter:"))
<string> in <module>()
NameError: name 'abcd' is not defined
同时,当我将代码修改为以下内容时:
x=eval('input()')
它运行良好:
In [27]: x=eval('input("enter:")')
enter:abcd
In [28]: print(x)
abcd
但是当输入为123时,x的类型为str
而不是int
:
In [30]: x=eval('input("enter:")')
enter:123
In [31]: print(type(x))
<class 'str'>
input()
一样只输入abcd呢? - Nikhil Chhabriaabcd
不是一个定义过的名称。当你在Python代码中使用abcd
时,它将被视为变量、函数等。要将其转换为字符串,需要用双引号括起来。在Python代码中有效的内容,在eval()
中也是有效的。为什么Python应该自动将abcd
转换为字符串呢?如果你想要一个字符串,为什么要使用eval()
呢? - L3viathaneval(input())
可以很好地处理这种情况,前提是输入是用引号括起来的。有没有办法在不提供引号字符串的情况下处理其他对象类型的场景? - Nikhil Chhabria