繁体   English   中英

如何正确使用eval function in python?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM