[英]How do I use the python eval() function for a tkinter text window?
[英]How to use eval function in python correctly?
我是编码新手,遇到了一个正常问题但无法解决:
a=list(input("enter some values"))
b=eval(input("enter some values"))
print (a)
print (b)
c=eval(4+3)
print(c)
Traceback (most recent call last):
File "C:/Users/ABC/Desktop/adadad.py", line 5, in <module>
c=eval(4+3)
TypeError: eval() arg 1 must be a string, bytes or code object
是什么导致了错误,我该如何更正它?
eval function 中给出的表达式应为字符串形式。 就像这个 eval("4+3")。 还要记住 eval function 只需要一个参数(这里是字符串)
4+3
产生一个int
object(“整数”;一个数字)。 然后你将它发送到eval()
,它不接受int
; 仅字符串(文本)、字节(二进制数据)或代码对象(函数或 lambda)。
所以这就是导致你错误的原因。
要修复它,您可以做两件事: c = eval("4+3")
或c = 4+3
。 你应该选择后者。 让我解释一下原因:
eval()
获取一些文本,将其解析为代码,然后执行。 这有时对运行“动态”代码很有用,即出于某种原因不能成为原始程序一部分的代码(例如用户输入)。 通常不鼓励这样做,因为它对不受控制的输入不安全。
直接写c = 4+3
更简单、更安全、更快。
您还应该删除顶部input()
调用周围的eval()
。 事实上,尝试在第二个“输入一些值”提示出现时输入print(a)
或raise Exception()
,您就会明白我的意思。
在这里, 3+4
在编译时计算(将 python 代码转换为字节代码)并替换为7
。 这是这段代码eval(3+4)
的字节码:
1 0 LOAD_NAME 0 (eval)
2 LOAD_CONST 0 (7)
4 CALL_FUNCTION 1
6 POP_TOP
8 LOAD_CONST 1 (None)
10 RETURN_VALUE
所以你正在执行没有意义的eval(7)
。 您可以将表达式作为字符串提供给 eval 以使其工作。
>>> eval("3+4")
7
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.