メインコンテンツまでスキップ

開発時によくあるランタイムエラー

エラーの一部原因対処方法
attempt to perform arithmetic on a数値以外の値に対して算術演算 (+、-、*、/) を実行しようとした算術演算の前に、演算対象がすべて数値であることを確認する
attempt to compare無効な値に対して比較演算 (>、<、>=、<=) を実行しようとした比較演算の前に、両方の値が比較可能であることを確認する
attempt to concatenate a文字列以外の値を連結 (..) しようとした文字列を連結する前に、両方の値が文字列であることを確認する
attempt to call a関数ではない変数を呼び出そうとした関数を呼び出す前に、その値が関数であることを確認する
attempt to index aテーブルではない変数をインデックス参照 (添字演算) しようとした配列や連想配列から値を取得する前に、その変数がテーブルであることを確認する
attempt to yield across a C-call boundaryyield できない呼び出しブロックで yield しようとしたモジュールを require するときは、require されるモジュールが戻る前に、yield する関数 (本マニュアルで関数名の前に感嘆符が付くもの) を呼び出していないことを確認してください。また、C コールバックを含む関数内で yield する関数 (本マニュアルで関数名の前に感嘆符が付くもの) を使用しないでください。
invalid order function for sorting無効なソート関数。通常は、ソート関数のルールが不明確な場合に発生するソート関数を呼び出す際は、a が b より大きい条件と小さい条件が同時に成立しないよう、ソート規則を明確にする
bad argument #1 to 'xxx' (number expected, got nil)xxx 関数の第 #1 引数の型が正しくない。number が必要だが nil が渡された引数が不正です。適切な引数を渡す
bad argument #2 to 'xxx' (number has no integer representation)xxx 関数の第 #2 引数を整数に変換できない引数が不正です。適切な引数を渡す
bad argument #3 to 'xxx'xxx 関数の第 #3 引数が不正引数が不正です。適切な引数を渡す
  • require の使用時に attempt to yield across a C-call boundary エラーが発生した場合の暫定的な回避策
    • 1、require されるモジュールのコード先頭に return function() を一行追加する
    • 2、require されるモジュールのコード末尾に end を一行追加する
    • 3、require するときに末尾へ括弧を一組追加する。例:require('A')require('A')() に変更する