コマンドラインで指定された述語がtrueであるテキストファイルの行数をカウントする、個人使用のための非常に単純なPythonユーティリティを作成しようとしています。コードは次のとおりです。
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コードのように見えます(Pythonのevalをこれまで使用したことがないので、その癖があればわかりません)。これを修正して機能させる方法を教えてください。