スクリプトのデバッグ
メタセコイアのスクリプトは素の状態だとエラー情報が一部しか表示されない。
例えば
def p(*args): """ プリント関数 複数の引数を渡せる。 """ if len(args)==0: # 改行させる MQSystem.println("") return for arg in args: MQSystem.println(str(arg)) def createTemplate(d, size): # createObjectはnewObjectの間違いw o=MQSystem.createObject() o.name="テンプレート" d.addObject(o) createTemplate(MQSystem.getDocument(), 100)
を実行すると
Failed to execute a script in line 20.
Attribute not found.
と返ってくる。
20行目は関数呼び出しでその中のどこで死んでるいるかわからない。
これじゃ、直せません。
そこで最後の行を以下のようにして例外をキャッチしてエラー情報を取得すると
import sys try: createTemplate(MQSystem.getDocument(), 100) except: p(*sys.exc_info())
exceptions.AttributeError 'module' object has no attribute 'createObject' <traceback object at 0x05484100>
と情報が得られる。
だが、まだ足りない。
もうちょっとがんばって場所の情報を得る。
import traceback import sys try: createTemplate(MQSystem.getDocument(), 100) except: info=sys.exc_info() p(info[0]) p(info[1]) p(*traceback.extract_tb(info[2]))
exceptions.AttributeError 'module' object has no attribute 'createObject' ('', 23, '?', None) ('', 16, 'createTemplate', None) # createTemplateの中、16行目にcreateObjectなんか無いよと言われている
これだけ情報があればなおせる。
(スクリプトがあまり流行っていないように見えるのは、エラー情報が足りなくてデバッグ困難なのが一因の気がする)