跳至主要內容

開發常見運行期錯誤參考

錯誤描述片段原因處理方式
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 boundary嘗試在不能讓出的呼叫塊中讓出require 一個模組的時候,請確認被 require 的模組返回之前沒有呼叫會讓出的函式 (手冊上函式前帶嘆號) 。還有就是不要嘗試在帶 C 回調的函式中使用會讓出的函式 (手冊上函式前帶嘆號) 。
invalid order function for sorting非法的排序函式,通常發生在排序函式的規則邏輯不夠明確的情況下呼叫排序函式時,明確排序規則,不要出現 a 大於 b 成立同時小於 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')()