Python
jit
Try-Catch
Numba

numbaのjitではtry-catch節がエラーになる

この記事は要約です。詳細は以下のリンク先ブログ記事をご覧ください。

http://coffeebreakscript.hatenablog.com/entry/2018/06/18/143536

numba@jitを使って定義した関数の中ではtry-catch節を用いた例外処理が使えません。

たとえば、次のようなコードを動かすと…

from numba import jit

@jit
def function_name(input_args):
hoge ...
try:
hoge1
exception ERROR:
hoge2

return hoge

こんな感じのエラーが出ます。(最後の4行だけ抜粋)

    (前略)

File "C:\ProgramData\Anaconda3\lib\site-packages\numba\controlflow.py", line 515, in run
assert not inst.is_jump, inst
AssertionError: Failed at object (analyzing bytecode)
SETUP_EXCEPT(arg=XXX, lineno=XXX)

※arg=とlineno=の後のXXXには本来なら数字が入ります。

今のところ回避策はないようです。

『try-catchを使いたい場合は@jitを使わない』というのが唯一の対処法っぽい。(回避策ご存知の方はコメント欄までお願いいたします。)

■参考サイト:

https://stackoverflow.com/questions/47064474/avoid-try-catch-in-numba