スクリプトのデバッグ

メタセコイアスクリプトは素の状態だとエラー情報が一部しか表示されない。
例えば

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なんか無いよと言われている

これだけ情報があればなおせる。
(スクリプトがあまり流行っていないように見えるのは、エラー情報が足りなくてデバッグ困難なのが一因の気がする)


これでやっとスクリプトが書ける。
(モデリングが一歩も進んでいないw)