簡體   English   中英

創建numpy自定義對象數組會出現錯誤“SystemError:error return return without exception set”

[英]Creating numpy array of custom objects gives error “SystemError: error return without exception set”

我正在嘗試使用numpy來存儲我制作的一些自定義對象。 以下是我的程序的簡化版本

import numpy as np

class Element:
    def __init__(self): pass

a = Element()
periodicTable = np.array(range(7*32)).reshape((7,32))
periodicTable[0][0] = a

但是,當我運行這個時,我得到了

Traceback (most recent call last):
  File "C:/Users/Dan/Desktop/a.py", line 9, in <module>
    periodicTable[0][0] = a
SystemError: error return without exception set

我不確定我做錯了什么 - 據我所知,我所做的一切都應該是合法的。 隱秘的錯誤信息本身並不是很有幫助 - 我認為這是一個numpy問題,但我一直無法確定我的問題。

@ user2357112確定了問題:您正在將一個Element實例分配給一個包含整數的numpy數組。 這是我嘗試類似的東西時得到的:

>>> import numpy as np
>>> np.__version__
'1.7.1'
>>> p = np.array([1,2,3])
>>> class Foo:
...     pass
... 
>>> p[0] = Foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
SystemError: error return without exception set
>>> 

毫不奇怪,這是不允許的。 然而,這個神秘的錯誤消息幾乎肯定是一個笨拙的錯誤。

解決此問題的一種方法是使用類型為object的數組。 改變這一行:

    periodicTable = np.array(range(7*32)).reshape((7,32))

對此:

    periodicTable = np.empty((7,32), dtype=object)

更新

在numpy 1.10.1中,錯誤消息仍然有點神秘:

>>> import numpy as np
>>> np.__version__
'1.10.1'    
>>> p = np.array([1, 2, 3])
>>> class Foo:
...     pass
...  
>>> p[0] = Foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Foo instance has no attribute '__trunc__'

更新2

numpy的更高版本的錯誤消息更好:

In [1]: import numpy as np

In [2]: np.__version__
Out[2]: '1.12.1'

In [3]: class Foo:
   ...:     pass
   ...: 

In [4]: p = np.array([1, 2, 3])

In [5]: p[0] = Foo()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-739d5e5f795b> in <module>()
----> 1 p[0] = Foo()

TypeError: int() argument must be a string, a bytes-like object or a number, not 'Foo'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM