我注意到Python的 eval ()函数缩短了一些列表,使用“...”:
In [10]: eval ('array([1. / 5.0e-12] + [0.]*1023)')
Out[10]:
array([ 2.00000000e+11, 0.00000000e+00, 0.00000000e+00, ...,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00])
如何防止它这样做?
(后续代码正在对“......”进行抨击。):
File "<string>", line 1
initializer.channel_response = array([ 2.00000000e+11, 0.00000000e+00, 0.00000000e+00, ...,
^
SyntaxError: invalid syntax
以下是我创建的一个配置文件中的典型“行”:
('Pretap = 0', \
({'root_name' : 'example_tx', \
'tx_tap_np1' : 0, \
'tx_tap_nm1' : 0, \
'tx_tap_nm2' : 0, \
}, \
{'channel_response' : array([1. / 5.0e-12] + [0.]*1023), \
'sample_interval' : 5.0e-12, \
} \
) \
)
答案 0 :(得分:3)
您正试图以错误的方式序列化(保存)数组。 Numpy有np.save或numpy.savetxt,您可以使用它来保存数据,然后将numpy.load或numpy.loadtxt从文件中保存。
不要使用eval,这样做既不安全也不明智,因为对象表示可能无法显示可靠地再现某些对象所需的所有信息。
如果你正在加载人类可读的配置,常见的方法是通过模块configparser。