Secara amnya terdapat tiga jenis ralat: ralat sintaks, ralat semantik dan ralat logik. Ralat sintaks berlaku apabila kod tidak sah. Misalnya, kod berikut akan dikesan Lua sebagai tidak sah:

print(5 ++ 4 return)

Kod di atas tidak munasabah. Dengan Lua, mustahil untuk mendapatkan maknanya. Sebagai perbandingan, ini sama juga dengan frasa Bahasa Melayu, "orang pokok panjat tiga" yang tidak sah daripada segi sintaks kerana ia tidak ada makna – ia tidak mengikut lunas-lunas pembinaan ayat.

Ralat semantik berlaku apabila kod itu mengandungi makna, akan tetapi masih tidak munasabah. Misalnya, jika anda cuba menambah rentetan pada nombor, anda kan menimbulkan ralat semantik kerana mustahil untuk menambah rentetan pada nombor:

print("helo" + 5)

Kod di atas mematuhi peraturan sintaks Lua akan tetapi masih tidak munasabah (buat Lua) kerana mustahil untuk manambah rentetan pada nombor atau sebaliknya melainkan rentetan itu mewakili nombor (seperti "5", dan dalam kes ini rentetan akan dipaksa menjadi nombor 5).