• 错误机制


    错误处理非常关键,因为实际操作通常需要使用复杂的操作,包括文件操作,数据库事务和Web服务调用。

    在任何编程中,总是需要错误处理。 错误可以是两种类型,它们包括 -

    语法错误运行时错误

    1. 语法错误由于不正确地使用各种程序组件(如运算符和表达式),从而发生语法错误。 语法错误的一个简单示例如下所示-

    a == 2

    Lua

    使用单个“单等于号”和“双等于号”之间存在差异。 使用不当可能导致错误。 一个“等于”指的是赋值,而两个“等于”指的是比较。

    语法错误的另一个示例如下所示 -

    for a= 1,10

       print(a)

    end

    Lua

    当运行上述程序时,将获得以下输出 -

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

    语法错误比运行时错误更容易处理,因为Lua解释器比运行时错误更清楚地定位错误。 从上面的错误中,可以很容易地知道根据Lua结构在print语句之前添加do语句。

    2. 运行时错误如果出现运行时错误,程序将成功执行,但由于输入错误或错误处理的函数,可能会导致运行时错误。 显示运行时错误的简单示例如下所示。

    function add(a,b)

       return a+b

    end

    add(10)

    Lua

    当构建上面程序时,它将成功构建并运行。 运行后,显示运行时错误。

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

    这是由于未传递两个参数变量而发生的运行时错误。 b参数是预期的,但是因为它未传入,默认使用的是nil从而产生错误。

    断言和错误功能要处理错误,经常使用两个函数是 -  assert和error。 一个简单的例子如下所示。

    local function add(a,b)

       assert(type(a) == "number", "a is not a number")

       assert(type(b) == "number", "b is not a number")

       return a+b

    end

    add(10)

    Lua

    当构建上面程序时,它将成功构建并运行。 运行后,显示运行时错误。

    lua: test2.lua:3: b is not a number

    stack traceback:

        [C]: in function 'assert'

        test2.lua:3: in function 'add'

        test2.lua:6: in main chunk

        [C]: ?

    error(message [,level])终止最后一个调用的受保护函数,并将消息作为错误消息返回。 此函数错误永远不会返回。 通常,错误会在消息开头添加有关错误位置的一些信息。 level参数指定如何获取错误位置。 对于级别1(默认值),错误位置是调用错误函数的位置。 级别2将错误指向调用调用错误的函数的位置等等。 传递0级可避免向消息添加错误位置信息。

    pcall和xpcall在Lua编程中,为了避免抛出这些错误和处理错误,需要使用pcall或xpcall函数。

    pcall(f,arg1,...)函数在保护模式下调用所请求的函数。 如果函数f中发生某些错误,则不会抛出错误。 它只返回错误状态。 使用pcall的一个简单示例如下所示。

    function myfunction ()

       n = n/nil

    end

    if pcall(myfunction) then

       print("Success")

    else

        print("Failure")

    end

    Lua

    当构建上面程序时,它将成功构建并运行。 运行后,显示运行时错误。

    Failure

    xpcall(f,err)函数调用所请求的函数,并设置错误处理程序。 f内的任何错误都不会传播; 而xpcall只捕获错误,使用原始错误对象调用err函数,并返回状态代码。

    xpcall函数的一个简单示例如下所示 -

    function myfunction ()

       n = n/nil

    end

    function myerrorhandler( err )

       print( "ERROR:", err )

    end

    status = xpcall( myfunction, myerrorhandler )

    print( status)

    Lua

    当运行上面的程序时,将得到以下输出。

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

    false

  • 相关阅读:
    转 使用SwingBench 对Oracle RAC DB性能 压力测试 以及 MySQL基准测试工具--sysbench
    转 ORACLE约束总结
    转 使用隐含Trace参数诊断Oracle Data Pump故障
    转 OGG-01224 TCP/IP error 111 (Connection refused); retries exceeded.
    ora-1652
    js jquery 遍历 for,while,each,map,grep
    jQuery ajax读取本地json文件
    js jquery数组去重
    js 时间日期格式转换
    js取整数、取余数的方法
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/10962874.html
Copyright © 2020-2023  润新知