Lua 오류 처리의 error, assert, pcall, xpcall

12308 단어 #LuaLua 필기 사용

Lua 오류 처리

  • error
  • assert
  • pcall
  • xpcall

  • 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)

    좋은 웹페이지 즐겨찾기