On Tue, Nov 04, 2014 at 04:11:13PM +0000, Albert-Jan Roskam wrote:

> Hmm, I get 1900 occurrences of eval() (and 700 of frozenset, just 
> curious) in Python. That's MUCH, I must be something wrong, but I am 
> rushing now!

For what it's worth, in Python 2.7, and *only* looking at the top level 
of the standard library, I get 23 occurances of "eval(". 11 of those are 
false positives, that is, comments, docstrings, or functions named 
"something_eval(".


[steve@ando ~]$ python2.7 -c "import timeit; print(timeit.__file__)"
/usr/local/lib/python2.7/timeit.pyc
[steve@ando ~]$ grep "eval(" /usr/local/lib/python2.7/*.py | wc -l
23
[steve@ando ~]$ grep "eval(" /usr/local/lib/python2.7/*.py
/usr/local/lib/python2.7/ast.py:def literal_eval(node_or_string):
/usr/local/lib/python2.7/bdb.py:    def runeval(self, expr, globals=None, 
locals=None):
/usr/local/lib/python2.7/bdb.py:            return eval(expr, globals, locals)
/usr/local/lib/python2.7/bdb.py:                val = eval(b.cond, 
frame.f_globals,
/usr/local/lib/python2.7/decimal.py:        # Invariant:  eval(repr(d)) == d
/usr/local/lib/python2.7/dumbdbm.py:                key, pos_and_siz_pair = 
eval(line)
/usr/local/lib/python2.7/gettext.py:    return eval('lambda n: int(%s)' % 
plural)
/usr/local/lib/python2.7/mhlib.py:    def do(s): print s; print eval(s)
/usr/local/lib/python2.7/pdb.py:                    func = eval(arg,
/usr/local/lib/python2.7/pdb.py:            return eval(arg, 
self.curframe.f_globals,
/usr/local/lib/python2.7/pdb.py:                x = eval(arg, {}, {})
/usr/local/lib/python2.7/pdb.py:            value = eval(arg, 
self.curframe.f_globals,
/usr/local/lib/python2.7/pdb.py:def runeval(expression, globals=None, 
locals=None):
/usr/local/lib/python2.7/pdb.py:    return Pdb().runeval(expression, globals, 
locals)
/usr/local/lib/python2.7/pprint.py:    """Determine if saferepr(object) is 
readable by eval()."""
/usr/local/lib/python2.7/rexec.py:The class RExec exports methods r_exec(), 
r_eval(), r_execfile(), and
/usr/local/lib/python2.7/rexec.py:exec, eval(), execfile() and import, but 
executing the code in an
/usr/local/lib/python2.7/rexec.py:    def r_eval(self, code):
/usr/local/lib/python2.7/rexec.py:        return eval(code, m.__dict__)
/usr/local/lib/python2.7/rexec.py:    def s_eval(self, *args):
/usr/local/lib/python2.7/rexec.py:        Similar to the r_eval() method, but 
the code will be granted access
/usr/local/lib/python2.7/rlcompleter.py:            thisobject = eval(expr, 
self.namespace)
/usr/local/lib/python2.7/warnings.py:            cat = eval(category)


You'll note that most of the actual calls to eval are in the Python 
debugger, pdb, which makes sense.

Looking one directory down, I get a further 260 such instances, 224 of 
which are in the "test" subdirectory:

[steve@ando ~]$ grep "eval(" /usr/local/lib/python2.7/*/*.py | wc -l
260
[steve@ando ~]$ grep "eval(" /usr/local/lib/python2.7/test/*.py | wc -l
224

Digging deeper still, I find that IDLE also includes many calls to 
eval(), as does the turtle graphics module (which is old and hasn't had 
much love for a long time). There is also a large test suite with many 
calls to eval() in 2to3, as well as many hundreds of false positives, 
e.g. sympy defines dozens of classes with an eval method.

Since these results depend on what third-party libraries have been 
installed, your results may vary.



-- 
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to