Lua 오류 처리의 error, assert, pcall, xpcall
Lua 오류 처리
error
error (message [, level])
마지막 보호 함수 호출을 중단하고 오류 대상 메시지를 되돌려줍니다.함수 error는 영원히 되돌아오지 않습니다.메시지가 문자열일 때, 오류 위치에 대한 정보를 메시지 앞에 추가합니다.level 매개 변수는 오류 위치를 어떻게 얻는지 가리킨다.level 1 (기본값) 에서 오류 위치는 error 함수가 호출된 위치를 가리킵니다.Level 2는 오류 위치가 error의 함수를 호출하는 함수를 가리킵니다.이렇게 유추하다.level 0을 전송하면 메시지 전에 잘못된 위치 정보를 추가하는 것을 피할 수 있습니다.
Lua에서 error 함수를 사용하여 오류 정보를 내보냅니다. 보통 호출 스택 정보와 오류 알림 정보를 포함합니다!첫 번째 매개 변수 메시지는 사용자 정의 오류 알림 정보입니다.두 번째 파라미터는 선택할 수 있는 오류 위치 정보입니다. 기본값은 1입니다. 즉, error 함수를 호출하는 위치입니다.2 error 함수를 호출하는 함수의 위치입니다.0은 잘못된 위치 정보를 인쇄하지 않습니다!function testError()
error("error test1")
-- error("error test2", 1)
-- error("error test3", 0)
-- error("error test4", 2)
end
testError()
--[[
lua: C:\Users\user\Desktop\transition\csdn\test.lua:2: error test1
stack traceback:
[C]: in function 'error'
C:\Users\user\Desktop\transition\csdn\test.lua:2: in function 'testError'
C:\Users\user\Desktop\transition\csdn\test.lua:8: in main chunk
[C]: ?
]]
assert
assert (v [, message])
만약 매개 변수 v의 값이 가짜 (nil 또는false) 라면,error를 호출합니다.그렇지 않으면 모든 매개 변수를 되돌려줍니다.오류가 발생했을 때 메시지는 그 오류 대상을 가리킨다.이 인자를 제공하지 않으면 인자는 기본적으로 "assertionfailed!"입니다.
assert는 error의 포장입니다. 판단 같은 조작을 포장합니다!그래서 ASsert를 사용하는 것이 error를 사용하는 것보다 더 편리합니다!첫 번째 매개 변수가nil이거나 판단된 결과가false일 때 오류를 던져 실행을 중단하고 error 함수를 호출합니다.그렇지 않으면 계속 실행합니다!두 번째 파라미터는 선택할 수 있는 오류 알림 정보입니다. 이 파라미터를 제공하면error 함수를 호출할 때message를 출력합니다.그렇지 않으면 기본 "assertion failed!"를 사용합니다.function testAssert()
local a, b = "hello", "world"
assert(a == b, "a,b is not equal !")
print("next operate")
end
testAssert()
--[[
lua: C:\Users\user\Desktop\transition\csdn\test.lua:3: a,b is not equal !
stack traceback:
[C]: in function 'assert'
C:\Users\user\Desktop\transition\csdn\test.lua:3: in function 'testAssert'
C:\Users\user\Desktop\transition\csdn\test.lua:7: in main chunk
[C]: ?
]]
pcall
pcall (f [, arg1, ···])
보호 모드로 함수 f를 호출하는 매개 변수를 전송합니다.이것은 f의 어떤 오류도 던지지 않는다는 것을 의미한다.대신 pcall은 오류를 포착하고 상태 코드를 되돌려줍니다.첫 번째 반환 값은 오류가 없을 때 상태 코드 (부울 양) 입니다.이 때, pcall 역시 상태 코드 뒤에 모든 호출 결과를 되돌려줍니다.오류가 있을 때, pcall은false에 오류 메시지를 되돌려줍니다.
pcall은 오류를 포착하지만 던지지 않기 때문에 프로그램의 실행이 중단되지 않습니다!첫 번째 파라미터는 목표 함수입니다. 목표 함수 실행에 오류가 발생하면 pcall 함수는false와 오류 정보를 되돌려줍니다.그렇지 않으면 pcall 함수가true와 목표 함수의 모든 호출 결과를 되돌려줍니다!뒤에 있는 매개 변수는 목표 함수의 매개 변수 목록입니다. 선택할 수 있습니다!function testPcall(arg1, arg2)
print(arg1, arg2)
error("pcall test")
-- return "pcall test"
end
local ret, msg = pcall(testPcall, "hello", "fightsyj")
print(ret, msg)
print("next operate")
--[[
hello fightsyj
false C:\Users\user\Desktop\transition\csdn\test.lua:3: pcall test
next operate
]]
xpcall
xpcall (f, msgh [, arg1, ···])
이 함수는 pcall과 유사합니다.그러나 메시지 프로세서 msgh를 추가로 설정할 수 있습니다.
xpcall은 pcall의 기초 위에 오류 처리 함수를 추가할 수 있습니다!첫 번째 파라미터와 뒤에 있는 파라미터 목록은 pcall과 같습니다!두 번째 파라미터는 오류 처리 함수입니다. 이 함수에서 창고 정보를 출력하는 등 조작할 수 있습니다!function testXpcall()
error("xpcall test")
-- return "pcall test"
end
--
function dealFunc()
-- print(debug.traceback())
print("xpcall dealFunc")
end
local ret, msg = xpcall(testXpcall, dealFunc)
print(ret, msg)
print("next operate")
--[[
xpcall dealFunc
false nil
next operate
]]
참고: Lua 5.3 참조 안내서 Lua 학습 노트(8) 오류(error)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법
원래 Turobolinks란?
Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고,
이동한 페이지를 Ajax에서 가져옵니다.
그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function testError()
error("error test1")
-- error("error test2", 1)
-- error("error test3", 0)
-- error("error test4", 2)
end
testError()
--[[
lua: C:\Users\user\Desktop\transition\csdn\test.lua:2: error test1
stack traceback:
[C]: in function 'error'
C:\Users\user\Desktop\transition\csdn\test.lua:2: in function 'testError'
C:\Users\user\Desktop\transition\csdn\test.lua:8: in main chunk
[C]: ?
]]
assert (v [, message])
만약 매개 변수 v의 값이 가짜 (nil 또는false) 라면,error를 호출합니다.그렇지 않으면 모든 매개 변수를 되돌려줍니다.오류가 발생했을 때 메시지는 그 오류 대상을 가리킨다.이 인자를 제공하지 않으면 인자는 기본적으로 "assertionfailed!"입니다.
assert는 error의 포장입니다. 판단 같은 조작을 포장합니다!그래서 ASsert를 사용하는 것이 error를 사용하는 것보다 더 편리합니다!첫 번째 매개 변수가nil이거나 판단된 결과가false일 때 오류를 던져 실행을 중단하고 error 함수를 호출합니다.그렇지 않으면 계속 실행합니다!두 번째 파라미터는 선택할 수 있는 오류 알림 정보입니다. 이 파라미터를 제공하면error 함수를 호출할 때message를 출력합니다.그렇지 않으면 기본 "assertion failed!"를 사용합니다.
function testAssert()
local a, b = "hello", "world"
assert(a == b, "a,b is not equal !")
print("next operate")
end
testAssert()
--[[
lua: C:\Users\user\Desktop\transition\csdn\test.lua:3: a,b is not equal !
stack traceback:
[C]: in function 'assert'
C:\Users\user\Desktop\transition\csdn\test.lua:3: in function 'testAssert'
C:\Users\user\Desktop\transition\csdn\test.lua:7: in main chunk
[C]: ?
]]
pcall
pcall (f [, arg1, ···])
보호 모드로 함수 f를 호출하는 매개 변수를 전송합니다.이것은 f의 어떤 오류도 던지지 않는다는 것을 의미한다.대신 pcall은 오류를 포착하고 상태 코드를 되돌려줍니다.첫 번째 반환 값은 오류가 없을 때 상태 코드 (부울 양) 입니다.이 때, pcall 역시 상태 코드 뒤에 모든 호출 결과를 되돌려줍니다.오류가 있을 때, pcall은false에 오류 메시지를 되돌려줍니다.
pcall은 오류를 포착하지만 던지지 않기 때문에 프로그램의 실행이 중단되지 않습니다!첫 번째 파라미터는 목표 함수입니다. 목표 함수 실행에 오류가 발생하면 pcall 함수는false와 오류 정보를 되돌려줍니다.그렇지 않으면 pcall 함수가true와 목표 함수의 모든 호출 결과를 되돌려줍니다!뒤에 있는 매개 변수는 목표 함수의 매개 변수 목록입니다. 선택할 수 있습니다!function testPcall(arg1, arg2)
print(arg1, arg2)
error("pcall test")
-- return "pcall test"
end
local ret, msg = pcall(testPcall, "hello", "fightsyj")
print(ret, msg)
print("next operate")
--[[
hello fightsyj
false C:\Users\user\Desktop\transition\csdn\test.lua:3: pcall test
next operate
]]
xpcall
xpcall (f, msgh [, arg1, ···])
이 함수는 pcall과 유사합니다.그러나 메시지 프로세서 msgh를 추가로 설정할 수 있습니다.
xpcall은 pcall의 기초 위에 오류 처리 함수를 추가할 수 있습니다!첫 번째 파라미터와 뒤에 있는 파라미터 목록은 pcall과 같습니다!두 번째 파라미터는 오류 처리 함수입니다. 이 함수에서 창고 정보를 출력하는 등 조작할 수 있습니다!function testXpcall()
error("xpcall test")
-- return "pcall test"
end
--
function dealFunc()
-- print(debug.traceback())
print("xpcall dealFunc")
end
local ret, msg = xpcall(testXpcall, dealFunc)
print(ret, msg)
print("next operate")
--[[
xpcall dealFunc
false nil
next operate
]]
참고: Lua 5.3 참조 안내서 Lua 학습 노트(8) 오류(error)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법
원래 Turobolinks란?
Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고,
이동한 페이지를 Ajax에서 가져옵니다.
그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
function testPcall(arg1, arg2)
print(arg1, arg2)
error("pcall test")
-- return "pcall test"
end
local ret, msg = pcall(testPcall, "hello", "fightsyj")
print(ret, msg)
print("next operate")
--[[
hello fightsyj
false C:\Users\user\Desktop\transition\csdn\test.lua:3: pcall test
next operate
]]
xpcall (f, msgh [, arg1, ···])
이 함수는 pcall과 유사합니다.그러나 메시지 프로세서 msgh를 추가로 설정할 수 있습니다.
xpcall은 pcall의 기초 위에 오류 처리 함수를 추가할 수 있습니다!첫 번째 파라미터와 뒤에 있는 파라미터 목록은 pcall과 같습니다!두 번째 파라미터는 오류 처리 함수입니다. 이 함수에서 창고 정보를 출력하는 등 조작할 수 있습니다!
function testXpcall()
error("xpcall test")
-- return "pcall test"
end
--
function dealFunc()
-- print(debug.traceback())
print("xpcall dealFunc")
end
local ret, msg = xpcall(testXpcall, dealFunc)
print(ret, msg)
print("next operate")
--[[
xpcall dealFunc
false nil
next operate
]]
참고: Lua 5.3 참조 안내서 Lua 학습 노트(8) 오류(error)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.