Python Eval:这段代码出了什么问题?

dsi*_*cha 2 python eval syntax-error

我正在尝试编写一个非常简单的Python实用程序供个人使用,它计算文本文件中为命令行指定的谓词为true的行数.这是代码:

import sys

pred = sys.argv[2]
if sys.argv[1] == "stdin" :
    handle = sys.stdin
else :
    handle = open(sys.argv[1])
result = 0
for line in handle :
    eval('result += 1 if ' + pred + ' else 0')
print result
Run Code Online (Sandbox Code Playgroud)

当我使用它运行时python count.py myFile.txt "int(line) == 0",我收到以下错误:

  File "c:/pycode/count.py", line 10, in <module>
    eval('toAdd = 1 if ' + pred + ' else 0')
  File "<string>", line 1
    toAdd = 1 if int(line) == 0 else 0
Run Code Online (Sandbox Code Playgroud)

这看起来对我来说是完全有效的Python代码(虽然我之前从未使用过Python的eval,所以我不知道它的怪癖,如果有的话).请告诉我如何解决这个问题才能让它发挥作用.

enn*_*ler 11

尝试使用exec而不是eval.这里解释了2之间的区别


ori*_*rip 5

尝试:

for line in handle:
  result += 1 if eval(pred) else 0
Run Code Online (Sandbox Code Playgroud)