J'essaie d'écrire un utilitaire Python très simple pour un usage personnel qui compte le nombre de lignes dans un fichier texte pour lequel un prédicat spécifié à la ligne de commande est vrai. Voici le code:Python Eval: Quel est le problème avec ce code?
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
Quand je lance à l'aide python count.py myFile.txt "int(line) == 0"
, je reçois l'erreur suivante:
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
Cela ressemble à du code Python parfaitement valide pour moi (même si je ne l'ai jamais utilisé le eval de Python avant , donc je ne sais pas quelles sont ses bizarreries, le cas échéant). S'il vous plaît dites-moi comment je peux résoudre ce problème pour le faire fonctionner.
Ceci est excellent, une grande amélioration par rapport aux autres versions en termes de simplicité et d'efficacité. –
Merci. C'est beaucoup plus rapide que les autres versions, je suppose que l'interpréteur analyse et compile le prédicat O (1) au lieu de O (N) fois. – dsimcha