とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

Pythonのバッドノウハウ

例外が発生するはずのない行でなぜか例外が発生した時の原因をメモしておきます。

_g_foo = "123"
def bar():
    global _g_foo
    print _g_foo    #<-- typeerror: an integer is required

print _g_foo の行で例外発生。
_g_foo は存在しているし、値を書き換えた覚えも無いのに例外が発生・・・謎だ。

環境

Python 2.7.1
SWIG 1.3.40

原因

SWIG が自動生成したソースコード(.cpp)(.py)側で Python の例外が発生すると、おかしな行番が表示されるようです。

自分がはまったときは、引数に int 値を与えるべきところを None を与えたのが原因でした。

  • C++側の関数
//my_mod.cpp
void set_int(int value);
import my_mod

if flag:
    my_mod.set_int(None)    #<--これが諸悪の原因でした。
else:
    my_mod.set_int(255)


print デバッグ余裕でした。