eval()突然在我所有的python代码中不起作用

2024-10-02 20:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经使用Python2好几个月了,通常使用eval()动态设置变量。例如:

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

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

今天,当我使用eval()时,我今天编写的所有代码都会突然出错。在

错误是:

Traceback (most recent call last):

File "", line 1, in list2plot = eval(what2plot + '_ls')

File "/anaconda/lib/python2.7/site-packages/pandas/computation/eval.py", line 266, in eval ret = eng_inst.evaluate()

File "/anaconda/lib/python2.7/site-packages/pandas/computation/engines.py", line 76, in evaluate res = self._evaluate()

File "/anaconda/lib/python2.7/site-packages/pandas/computation/engines.py", line 123, in _evaluate return ne.evaluate(s, local_dict=scope, truediv=truediv)

File "/anaconda/lib/python2.7/site-packages/numexpr/necompiler.py", line 789, in evaluate zip(names, arguments)]

File "/anaconda/lib/python2.7/site-packages/numexpr/necompiler.py", line 686, in getType raise ValueError("unknown type %s" % a.dtype.name)

ValueError: unknown type unicode1792


Tags: inpypandaslibpackagesevallinesite
1条回答
网友
1楼 · 发布于 2024-10-02 20:31:38

您的代码没有按预期工作,因为您没有运行正常的内置eval函数,而是运行pandas中的函数。您可能有一个from some_module import *语句,它将pandaseval函数引入到命名空间中,并在其中隐藏内置函数。在

有很多方法可以解决这个问题。在

最简单的可能就是不做这种导入。另一个选择是执行del eval,这将从您的名称空间中删除导入的函数,从而使内置函数再次可见。您还可以从builtins模块中再次导入它(对于python2,__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]

相关问题 更多 >