【发布时间】:2014-11-07 10:02:27
【问题描述】:
从here 跟进,我不断收到溢出。所以我试图提出一个例外,以便我确切地知道哪里出了问题。
我有这样的东西:
@jit
def train_function(X, y, H):
np.seterr(over="raise", under="raise", invalid="raise")
# do some stuff, start a double loop, and then do:
try:
z[i,j] = math.exp(-beta[j,i])
except OverflowError:
print "Calculation failed! z[i,j] = math.exp(-beta[j,i]), j: " + str(j) + ", i: " +str(i) + ", b: " + str(beta[j,i]) + ", omb: " + str(oneminusbeta[j,i])
raise
class MyClass(object):
# init and other methods
def train(self, X, y, H):
train_function(X, y, H)
但我收到此错误:
Traceback (most recent call last):
File "C:\work_asaaki\code\gbc_classifier_train_7.py", line 55, in <module>
gentlebooster.train(X_train, y_train, boosting_rounds)
File "C:\work_asaaki\code\gentleboost_c_class_jit_v7_nolimit.py", line 297, in train
self.g_per_round, self.g = train_function(X, y, H)
File "C:\Anaconda\lib\site-packages\numba\dispatcher.py", line 152, in _compile_for_args
return self.jit(sig)
File "C:\Anaconda\lib\site-packages\numba\dispatcher.py", line 143, in jit
return self.compile(sig, **kws)
File "C:\Anaconda\lib\site-packages\numba\dispatcher.py", line 131, in compile
flags=flags, locals=locs)
File "C:\Anaconda\lib\site-packages\numba\compiler.py", line 103, in compile_extra
bc = bytecode.ByteCode(func=func)
File "C:\Anaconda\lib\site-packages\numba\bytecode.py", line 305, in __init__
table = utils.SortedMap(ByteCodeIter(code))
File "C:\Anaconda\lib\site-packages\numba\utils.py", line 70, in __init__
for i, (k, v) in enumerate(sorted(seq)):
File "C:\Anaconda\lib\site-packages\numba\bytecode.py", line 219, in next
raise NotImplementedError(ts % tv)
NotImplementedError: offset=742 opcode=0x79 opname=SETUP_EXCEPT
我不能在使用 numba 时引发异常吗?我在 64 位机器上使用 Anaconda 2.0.1 和 Numba 0.13.x 和 Numpy 1.8.x。
【问题讨论】:
-
实际上看起来
try..except块不受numbas 字节码编译器的支持。您从here 获得NotImplementedError,因为SETUP_EXCEPT不在table of supported opcodes 中。 -
我收到了 numba 人的回复 - 他们设置 try-except 块无法在 numba 中实现。
-
@user961627,请将您从 numba 人那里得到的回复作为答案发布在下面,以帮助未来疲惫的旅行者 :)
标签: python numpy overflow numba raiserror