python - exec() with nested loop in list comprehension inside function error -
exec()
inside function gives different output, pass parameter needed function. consider code:
def list_filter(expr,datalist,includelist) : exec(expr) print outlist datalist=['try kill me','black image'] includelist=['me'] expr="outlist = [i in datalist if all(j in j in includelist) ]" exec(expr) print outlist list_filter(expr,datalist,includelist)
i have checked similar case here : how exec work locals?
but different error, i'm using version 2.7.13 , check under general condition, exec()
has no error @ all. found problem shows when there's 'nested loop' inside list comprehension statement, such using all()
or any()
. in case , if remove if condition
list comprehension (make expr = "outlist = [i in datalist ]"
) correct output usual.
any idea why?
almost it's bad idea use exec
in case shouldn't use @ all.
but since asked: works correctly if pass in variables local scope:
def list_filter(expr, datalist, includelist): exec(expr, locals()) print outlist
i'm not familiar scope rules exec
found need pass in variables explicitly (especially if exec
isn't in global scope).
in case pass them in explicitly:
def list_filter(expr, datalist, includelist): exec(expr, {'datalist': datalist, 'includelist': includelist}) print outlist
it's stated in documentation may need pass variables scope exec
:
the built-in functions
globals()
,locals()
return current global , local dictionary, respectively, may useful pass around useexec
.
Comments
Post a Comment