エラーのハンドリング

Love2Dはエラーが発生した場合、背景が水色のエラー画面が表示されます。

function love.load()
  result = test("nogizaka", 46)
end

function test(a, b)
  return a + b
end
エラーが発生

実行するとエラーになります。string型のaに対して加算を行おうとしたためです。エラーの発生箇所はTracebackに表示されています。

これらの情報は開発時はデバッグの役に立ちますが、エラー処理はきちんと行う必要があります。また、リリースしたアプリケーションでこのエラー画面が出てしまうとTracebackからソースコードの構成が部分的にわかってしまうのも問題です。

pcall

エラー処理を行う場合はpcall関数を使用します。pcallはlove2D独自の関数ではなくLuaに標準で用意されています。

function love.load()
  -- 第1引数:     呼び出す関数名
  -- 第2引数以降: 呼び出す関数の引数
  ok, result = pcall(test, "nogizaka", 46)
end

function test(a, b)
  return a + b
end

function love.draw()
  if not ok then
    love.graphics.print(result, 10, 10)
  end
end
pcallでエラーを捕まえる

pcallの1番目の戻り値はエラーの発生の有無です。エラーが発生していない場合、2番目の戻り値以降に呼び出した関数の戻り値が設定されます。エラーが発生した場合、2番目の戻り値にはエラーメッセージが設定されます。