首页 文章

eval()突然无法在我的所有python代码中工作

提问于
浏览
0

我已经使用Python 2几个月了,通常使用eval()来动态设置变量 . 例如:

num_ls = [1,2,3]
let_ls = ['a', 'b', 'c']

what2plot = 'num'
list2plot = eval(what2plot + '_ls')

今天,当我使用eval()时,今天写的所有代码突然出现错误 .

错误是:

回溯(最近一次调用最后一次):文件“”,第1行,在list2plot = eval(what2plot'_ls')文件“/anaconda/lib/python2.7/site-packages/pandas/computation/eval.py”,第266行,在eval ret = eng_inst.evaluate()文件“/anaconda/lib/python2.7/site-packages/pandas/computation/engines.py”,第76行,在评估res = self._evaluate()文件“ /anaconda/lib/python2.7/site-packages/pandas/computation/engines.py“,第123行,在_evaluate中返回ne.evaluate(s,local_dict = scope,truediv = truediv)文件”/ anaconda / lib / python2 .7 / site-packages / numexpr / necompiler.py“,第789行,在评估zip(名称,参数)中]文件”/anaconda/lib/python2.7/site-packages/numexpr/necompiler.py“,第686行,在getType中引发ValueError(“unknown type%s”%a.dtype.name)ValueError:unknown type unicode1792

1 回答

  • 3

    你的代码不是运行正常的内置 eval 函数,而是运行 pandas 中的函数 . 你可能有一个 from some_module import * 语句将pandas eval 函数带入你隐藏内置函数的命名空间 .

    您可以通过多种方式解决此问题 .

    最简单的可能是不进行导入 . 另一种选择是执行 del eval ,它将从命名空间中删除导入的函数,允许内置函数再次可见 . 您也可以从 builtins 模块(或Python的 __builtin__ )再次导入它 .

    但更好的方法可能是根本不使用 eval . 如果您遇到任何问题,它是不安全,缓慢且难以调试的 . 更好的选择是使用字典在字符串和列表之间进行映射:

    num_ls = [1,2,3]
    let_ls = ['a', 'b', 'c']
    selector_dict = {'num': num_ls, 'let': let_ls}
    
    what2plot = 'num'
    list2plot = selector_dict[what2plot]
    

相关问题