Я пытаюсь написать очень простую утилиту Python для личного использования, которая подсчитывает количество строк в текстовом файле, для которого предикат, указанный в командной строке, является истинным. Вот код:Python Eval: Что не так с этим кодом?
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
Когда я запускаю его с помощью 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
Это выглядит вполне действительный код Python для меня (хотя я никогда не использовал Eval Python перед , поэтому я не знаю, каковы его причуды, если таковые имеются). Скажите, пожалуйста, как я могу это исправить, чтобы он работал.
Это отличное, отличное улучшение по сравнению с другими версиями в простоте и эффективности. –
Спасибо. Я думаю, что это намного быстрее, чем другие версии, потому что интерпретатор анализирует и компилирует предикат O (1) вместо O (N) раз. – dsimcha