Najlepszy samouczek Lua Obsługa błędów W 2024 r. W tym samouczku możesz dowiedzieć się błąd składni,Runtime Error,Obsługa błędów,PCALL i xpcall, debugowanie,
Program obchodzenie uruchomić błąd jest to konieczne, w naszej operacji na plikach, transmisji danych i usług internetowych wywołaniu pojawi się w nieoczekiwanych błędów. Jeśli nie zwracać uwagę, aby radzić sobie z komunikatów o błędach, zgodnie z informacjami będzie przeciekać, nie można uruchomić i tak dalej.
Wszelkie języków programowania, wymagana jest obsługa błędów. rodzaje błędów są następujące:
Błędy składniowe są zazwyczaj spowodowane komponentów programu (takich jak operatorzy, wyrażeń) powstałe w wyniku niewłaściwego użytkowania. Prostym przykładem jest, co następuje:
-- test.lua 文件 a == 2
Powyższy kod jest wykonywany w wyniku:
lua: test.lua:2: syntax error near '=='
Jak widać, nie było więcej niż błąd składni, a "=" znak, a następnie przez dwa Znak "=" jest inna. A "=" jest wyrazem przypisanie dwóch "=" jest operacja porównania.
Inny przykład:
for a= 1,10 print(a) end
Powyższy program pojawi się następujące błędy:
lua: test2.lua:2: 'do' expected near 'print'
Błędy składniowe jest łatwiejsze niż prowadzenie błąd programu, należy uruchomić błąd w stanie zlokalizować konkretne błędy gramatyczne błędy, które można szybko rozwiązać, jak w powyższych przykładach, o ile robimy w pętli for można dodać:
for a= 1,10 do print(a) end
Uruchom program może wykonać błędu jest normalne, ale to wyświetli komunikat o błędzie. Poniższe przykłady, ponieważ parametry wejściowe błędów, błąd wykonania programu:
function add(a,b) return a+b end add(10)
Kiedy skompilować i uruchomić następujący kod, kompilator może być skuteczne, ale w czasie wykonywania spowoduje następujący błąd:
lua: test2.lua:2: attempt to perform arithmetic on local 'b' (a nil value) stack traceback: test2.lua:2: in function 'add' test2.lua:5: in main chunk [C]: ?
Poniższy komunikat o błędzie jest spowodowane tym, że program nie posiada parametr B.
Możemy korzystać z dwóch funkcji: assert i błędów do obsługi błędów. Przykłady są następujące:
local function add(a,b) assert(type(a) == "number", "a 不是一个数字") assert(type(b) == "number", "b 不是一个数字") return a+b end add(10)
Powyższy program pojawi się następujące błędy:
lua: test.lua:3: b 不是一个数字 stack traceback: [C]: in function 'assert' test.lua:3: in local 'add' test.lua:6: in main chunk [C]: in ?
Przykład dochodzić najpierw sprawdza pierwszy argument, jeśli nie ma problemu, twierdzą, nic nie robi, inaczej drugi argument, jak dochodzić komunikat rzucona.
Składnia:
error (message [, level])
: Kończy funkcji jest wykonywany, i zwraca zawartość wiadomości jako komunikat o błędzie (funkcja błędu nigdy nie wróci)
Zazwyczaj błąd będzie kilka dodatkowych informacji o błędzie do położenia głowicy.
Parametr Poziom wskazuje pozycję, aby uzyskać źle:
obsługa błędów Lua, można użyć funkcji (PCALL zabezpieczone połączenia), aby owinąć kod wykonywany.
PCALL otrzymaniu funkcję i chcesz przekazać parametr ten ostatni i stracony, wynik: wystąpił błąd, nie ma błędów lub zwracana wartość true lub false, ErrorInfo.
Składnia jest następująca
if pcall(function_name, ….) then -- 没有错误 else -- 一些错误 end
Prosty przykład:
> =pcall(function(i) print(i) end, 33) 33 true > =pcall(function(i) print(i) error('errorpl') end, 33) 33 false stdin:1: errorpl
> function f() return false,2 end > if f() then print '1' else print '0' end 0
PCALL w "trybie chronionym", aby wywołać pierwszy argument, więc PCALL Funkcja przechwytywania może wykonywać żadnych błędów.
Zazwyczaj, gdy wystąpi błąd, to ma nadzieję, że do końca się z większą ilością informacji debugowania, a nie tylko w którym wystąpił błąd. Ale PCALL powraca, to zniszczył część treści wezwania Zhan.
Lua zapewnia xpcall funkcji xpcall odbiera drugi parametr - procedurę obsługi błędu, gdy wystąpi błąd, Lua obsługi błędów zostanie wywołana przed wywołaniem Zhan pokaz, aby zobaczyć (odpoczynek), a następnie można użyć tej funkcji w bibliotece debugowania w celu uzyskania dodatkowych informacji o błędzie.
Biblioteka posiada dwa debug rodzajowe obsługi błędu:xpcall Przykład 2:
function myfunction () n = n/nil end function myerrorhandler( err ) print( "ERROR:", err ) end status = xpcall( myfunction, myerrorhandler ) print( status)
Powyższy program pojawi się następujące błędy:
ERROR: test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value) false