Il miglior tutorial Lua Gestione degli errori Nel 2024, in questo tutorial puoi imparare Errore di sintassi,Errore di runtime,Gestione degli errori,PCALL e xpcall, eseguire il debug,
Programma gestione degli errori è necessario eseguire, nel nostro operazioni sui file, il trasferimento di dati e servizi web invocazione apparirà errori imprevisti. Se non si presta attenzione a che fare con i messaggi di errore, in base alle informazioni perderà, non può essere eseguito, e così via.
Ogni linguaggio di programmazione, è necessaria la gestione degli errori. Tipi di errore sono:
Gli errori di sintassi sono solito a causa di componenti del programma (ad esempio, gli operatori, espressioni) causati da un uso improprio. Un semplice esempio è il seguente:
-- test.lua 文件 a == 2
Il codice precedente viene eseguito come risultato di:
lua: test.lua:2: syntax error near '=='
Come si può vedere, ci sono stati più di un errore di sintassi, un segno "=" seguito da due "=" segno è diverso. A "=" è l'espressione di assegnamento due "=" è l'operazione di confronto.
Un altro esempio:
for a= 1,10 print(a) end
Il programma di cui sopra verrà visualizzato i seguenti errori:
lua: test2.lua:2: 'do' expected near 'print'
Gli errori di sintassi è più facile che l'esecuzione di un errore di programma, errore di run in grado di individuare gli errori specifici, errori grammaticali che siamo in grado di risolvere in modo rapido, come gli esempi sopra riportati, purché facciamo in per dichiarazione possono essere aggiunti:
for a= 1,10 do print(a) end
Eseguire il programma in grado di eseguire l'errore è normale, ma il risultato sarà un messaggio di errore. Gli esempi che seguono, perché i parametri di input errori, errore di esecuzione del programma:
function add(a,b) return a+b end add(10)
Quando abbiamo compilare ed eseguire il codice riportato di seguito, il compilatore può avere successo, ma in fase di esecuzione produrrà il seguente errore:
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]: ?
Il seguente messaggio di errore è causato perché il programma manca il parametro b.
Possiamo usare due funzioni: assert ed errori per gestire gli errori. Esempi sono i seguenti:
local function add(a,b) assert(type(a) == "number", "a 不是一个数字") assert(type(b) == "number", "b 不是一个数字") return a+b end add(10)
Il programma di cui sopra verrà visualizzato i seguenti errori:
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 ?
Esempio affermare prima controlla il primo argomento, se non è un problema, affermare non fa nulla, in caso contrario, il secondo argomento ad affermare messaggio di errore generato.
sintassi:
error (message [, level])
: Termina la funzione in corso di esecuzione, e restituisce il contenuto del messaggio come il messaggio di errore (funzione di errore non tornerà mai più)
In genere, l'errore sarà alcune informazioni aggiuntive sul messaggio di errore nella posizione di testa.
parametro del livello indica la posizione da sbagliare:
la gestione degli errori Lua, è possibile utilizzare la funzione PCALL (chiamata protetta) per avvolgere il codice da eseguire.
PCALL ricevere una funzione e si vuole passare un parametro di quest'ultimo, ed eseguito, il risultato: c'è un errore, nessun errore, o il valore di ritorno di vero o falso, ErrorInfo.
La sintassi è la seguente
if pcall(function_name, ….) then -- 没有错误 else -- 一些错误 end
Semplice esempio:
> =pcall(function(i) print(i) end, 33) 33 true > =pcall(function(i) print(i) error('errorit') end, 33) 33 false stdin:1: errorit
> function f() return false,2 end > if f() then print '1' else print '0' end 0
PCALL in una "modalità protetta" per chiamare il primo argomento, quindi PCALL funzione di acquisizione in grado di eseguire eventuali errori.
In genere quando si verifica un errore, si spera di finire con più informazioni di debug, non solo dove si è verificato l'errore. Ma ritorna PCALL, ha distrutto parte del contenuto della chiamata Zhan.
Lua offre xpcall funzione, xpcall ricevere un secondo parametro - un gestore di errori quando si verifica un errore, gestore degli errori Lua sarà chiamato prima di chiamare spettacolo Zhan vedere (rilassarsi), quindi è possibile utilizzare questa funzione in libreria di debug per ottenere ulteriori informazioni sull'errore.
libreria di debug fornisce due gestore di errore generico:xpcall Esempio 2:
function myfunction () n = n/nil end function myerrorhandler( err ) print( "ERROR:", err ) end status = xpcall( myfunction, myerrorhandler ) print( status)
Il programma di cui sopra verrà visualizzato i seguenti errori:
ERROR: test2.lua:2: attempt to perform arithmetic on global 'n' (a nil value) false