我正在尝试以下功能:
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'>发布于 2019-03-13 14:44:11
eval评估一段代码。input从用户输入中获取字符串。因此:
eval(input())评估用户输入的任何内容。如果用户输入123,结果将是一个数字,如果他们输入"foo"将是一个字符串,如果他们输入?wrfs,则会引发一个错误。eval("input()")计算字符串"input()",这将导致input函数的执行。这将向用户请求一个字符串(以及其他任何内容),即123将是字符串"123",?wrfs将是字符串"?wrfs","foo"将是字符串'"foo"' (!)。第三个版本可能会使差异变得明显:eval(eval("input()"))与eval(input())完全相同。
发布于 2019-03-25 18:17:31
与其关注eval(“input()”)和eval(input())之间的差异,不如关注它们的主要相似之处:您不应该这样做!
我不知道eval(input())的成语来自于Python3,这可能是Python2用户移植input()的误解,他们没有学会使用raw_input(),但要避免使用!
在这种情况下,正确的答案是,如果您想要一个str,请执行以下操作:
x = input()如果您想要int,请执行以下操作:
x = int(input())但是,当您打开您的程序时,请停止使用eval(),以防止潜在用户滥用您的程序:
>>> x = eval(input('enter: '))
enter: __import__("os").system("rm *")
>>> 可别在家里尝试这些哟!或者工作!
如果要输入常量Python数据结构,可以从ast模块尝试literal_eval():
>>> from ast import literal_eval
>>> my_dict = literal_eval(input('enter dict: '))
enter dict: {'a': 1, 'b': 2, 'c': 3}
>>> my_dict
{'a': 1, 'b': 2, 'c': 3}
>>> type(my_dict)
<class 'dict'>
>>> 但还是要小心!
https://stackoverflow.com/questions/55144515
复制相似问题