Latest web development tutorials

Lua Fehlerbehandlung

Programm ausführen Fehlerbehandlung erforderlich ist, in unserer Datei-Operationen, Datenübertragung und Web-Service-Aufruf wird in unerwartete Fehler auftreten. Wenn Sie nicht darauf achten, mit Fehlermeldungen zu beschäftigen, entsprechend den Informationen undicht wird, kann nicht ausgeführt werden und so weiter.

Alle Programmiersprachen, Fehlerbehandlung erforderlich ist. Fehlertypen sind:

  • Syntaxfehler
  • Runtime Error

Syntaxfehler

Syntaxfehler sind in der Regel aufgrund der Programmkomponenten (wie Operatoren, Ausdrücke), die durch unsachgemäße Verwendung. Ein einfaches Beispiel ist wie folgt:

-- test.lua 文件
a == 2

Der obige Code wird als Ergebnis der Ausführung:

lua: test.lua:2: syntax error near '=='

Wie Sie sehen können, hat es mehr als ein Syntaxfehler gewesen, ein Zeichen "=" gefolgt von zwei Zeichen "=" ist anders. A "=" ist der Zuweisungsausdruck zwei "=" ist der Vergleichsoperation.

Ein weiteres Beispiel:

for a= 1,10
   print(a)
end

Das obige Programm wird die folgenden Fehler auftreten:

lua: test2.lua:2: 'do' expected near 'print'

Syntaxfehler ist einfacher als das Laufen einen Programmfehler, führen Fehler nicht in der Lage, die spezifischen Fehler zu lokalisieren, grammatikalische Fehler, die wir schnell, wie die obigen Beispiele, so lange lösen, wie wir in der for-Anweisung tun können hinzugefügt werden:

for a= 1,10
do
   print(a)
end

Runtime Error

Führen Sie das Programm ausführen kann Fehler ist normal, aber es wird eine Fehlermeldung ausgegeben. Die folgenden Beispiele, da die Parameter Eingabefehler, Programmausführungsfehler:

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

add(10)

Wenn wir den folgenden Code kompilieren und ausführen, kann der Compiler erfolgreich zu sein, aber während der Laufzeit wird die folgende Fehlermeldung erzeugen:

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]: ?

Die folgende Fehlermeldung wird verursacht, da das Programm den b-Parameter fehlt.


Fehlerbehandlung

Wir können zwei Funktionen zur Verfügung: assert und Fehler auf Fehler behandeln. Beispiele sind wie folgt:

local function add(a,b)
   assert(type(a) == "number", "a 不是一个数字")
   assert(type(b) == "number", "b 不是一个数字")
   return a+b
end
add(10)

Das obige Programm wird die folgenden Fehler auftreten:

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 ?

Beispiel behaupten, überprüft zunächst das erste Argument, wenn kein Problem, behaupten nichts tut, andernfalls das zweite Argument, zu behaupten, Fehlermeldung ausgelöst.

Fehlerfunktion

Syntax:

error (message [, level])

: Beendet die Funktion ausgeführt wird, und gibt den Inhalt der Meldung als Fehlermeldung (Fehlerfunktion wird nie wieder zurückkehren)

Typischerweise werden Fehler an die Kopfposition einige zusätzliche Informationen über die Fehlermeldung sein.

Parameter Level gibt die Position falsch zu bekommen:

  • Stufe = 1 [Standard]: So rufen Fehler (Datei + Zeilennummer)
  • Stufe = 2: Funktion, die die Fehlerfunktion aufruft angezeigt
  • Stufe = 0: fügen Sie keine Fehlerstelle

pcall und xpcall, debuggen

Lua Fehlerbehandlung, können Sie die Funktion pcall (geschützte Aufruf) verwenden Sie den Code zu wickeln ausgeführt werden.

pcall eine Funktion zu empfangen und Sie wollen einen Parameter des letzteren zu übergeben und ausgeführt, das Ergebnis: ein Fehler ist, kein Fehler, oder der Rückgabewert von wahr oder falsch, Errorinfo.

Die Syntax ist wie folgt

if pcall(function_name, ….) then
-- 没有错误
else
-- 一些错误
end

Einfaches Beispiel:

> =pcall(function(i) print(i) end, 33)
33
true
   
> =pcall(function(i) print(i) error('error..') end, 33)
33
false        stdin:1: error..
> function f() return false,2 end
> if f() then print '1' else print '0' end
0

pcall in einem "geschützten Modus" das erste Argument zu nennen, daher pcall Capture-Funktion Fehler durchführen kann.

Normalerweise, wenn ein Fehler auftritt, es hofft, mit mehr Debug-Informationen, um am Ende, nicht nur, wo der Fehler aufgetreten ist. Aber pcall zurückkehrt, ist es ein Teil des Inhalts des Anrufs Zhan zerstört.

Lua bietet xpcall Funktion, xpcall einen zweiten Parameter Empfang - einen Fehlerhandler, wenn ein Fehler auftritt, wird Lua Fehlerbehandlung vor dem Aufruf von Zhan Show aufgerufen werden, um zu sehen (entspannen), dann können Sie diese Funktion im Debug-Bibliothek verwenden weitere Informationen über den Fehler zu erhalten.

Debug-Bibliothek bietet zwei generische Fehlerbehandlung:

  • debug.debug: Lua eine Aufforderung zur Verfügung stellen, so dass Anwender die falschen Gründe zu verbreiten
  • debug.traceback: Nach Zhan Anruf eine erweiterte Fehlermeldung zu bauen
> = Xpcall (function (i) print (i) Fehler ( 'Fehler ..') Ende, function () print (debug.traceback ()) Ende, 33) 33 Stapel Zurückverfolgungs: stdin: 1: in Funktion [C]: in der Funktion 'Fehler' stdin: 1: in Funktion [C]: in der Funktion 'xpcall' stdin: 1: in Haupt chunk [C] :? In falsch nil

xpcall Beispiel 2:

function myfunction ()
   n = n/nil
end

function myerrorhandler( err )
   print( "ERROR:", err )
end

status = xpcall( myfunction, myerrorhandler )
print( status)

Das obige Programm wird die folgenden Fehler auftreten:

ERROR:	test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value)
false