我对python很新,我正在处理一个从我工作的人那里继承的python脚本,我收到了这个错误:
expected a readable buffer object
Run Code Online (Sandbox Code Playgroud)
导致这种情况的代码是:
self.y_NoShock_data = np.zeros((self.a_count+1,1,self.numberOfTags+1,lookback+forward,),dtype=enums.
self.y_data = np.zeros((self.a_count+1,len(self.SCL)+1,self.numberOfTags+1,lookback+forward,),dtype=enums.DataPoints)
self.y_NoShock_cum_data = np.zeros_like(self.y_NoShock_data)
self.y_cum_data = np.zeros_like(self.y_data)
Run Code Online (Sandbox Code Playgroud)
enums.DataPoints看起来像这样:
enums.DataPoints = dtype([
('Amount','float32'),
])
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪如下:
Internal Server
Error: /smCore/entity/1/runScenarioManager/
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py", line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/views/createScenario.py", line 445, in runScenarioManager
a = ScenarioExecutionController(sEA)
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecutionController.py", line 176, in __init__
shockEventDataSet=[], lookback=self.lookback, forward=self.forward, period=self.period) #,
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecution.py", line 307, in buildSeedScenarioObject
cls.updateScenarioParameters(shockContainerList,shockEventDataSet, shockEventDateList)
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecution.py", line 130, in updateScenarioParameters
self.initialiseResultArrays()
File "/Users/bentaliadoros/Documents/workspace/LivingSvnAmmar/trunk/ScenarioManagerStandAlone/smCore/models/scenarioExecution.py", line 154, in initialiseResultArrays
self.y_NoShock_cum_data = np.zeros_like(self.y_NoShock_data,dtype=enums.DataPoints)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/numpy/core/numeric.py", line 116, in zeros_like
res.fill(0)
TypeError: expected a readable buffer object
Run Code Online (Sandbox Code Playgroud)
他在电脑上工作,我在Mac上.我一直在环顾四周,但无法找到解决方案,有人能指出我正确的方向吗?
如果不知道enums.DataPointsdtype对象是什么样子就很难回复,但我会尝试解释你在哪里看到错误信息.
当您尝试将数组(元素)设置为某个与其dtype无法正确对齐的值时,您将看到这一点.这是一个例子:
In [133]: data = np.zeros((3,2), dtype="int, int")
In [134]: data
Out[134]:
array([[(0, 0), (0, 0)],
[(0, 0), (0, 0)],
[(0, 0), (0, 0)]],
dtype=[('f0', '<i8'), ('f1', '<i8')])
In [135]: data[0, 0]
Out[135]: (0, 0)
In [136]: data[0, 0] = [1,2]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-136-399e78675be4> in <module>()
----> 1 data[0, 0] = [1,2]
TypeError: expected a readable buffer object
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误,因为它无法处理分配给数组的一个元素的两个值.你的dtype中有两个值,所以看起来似乎是合理的,但是数组需要dtype给出的一个类型的对象:
In [137]: data[0,0] = (1,2)
In [138]: data
Out[138]:
array([[(1, 2), (0, 0)],
[(0, 0), (0, 0)],
[(0, 0), (0, 0)]],
dtype=[('f0', '<i8'), ('f1', '<i8')])
Run Code Online (Sandbox Code Playgroud)
可能是阵列形状相同的一组零不会与dtype对齐.