当前位置: 首页 > 编程笔记 >

Lua中的异常处理pcall、xpcall、debug使用实例

艾星河
2023-03-14
本文向大家介绍Lua中的异常处理pcall、xpcall、debug使用实例,包括了Lua中的异常处理pcall、xpcall、debug使用实例的使用技巧和注意事项,需要的朋友参考一下

如果需要在Lua中处理错误,必须使用函数pcall(protected call)来包装需要执行的代码。

pcall接收一个函数和要传递个后者的参数,并执行,执行结果:有错误、无错误;返回值true或者或false, errorinfo

   

if pcall(function_name, ….) then

-- no error

else

-- some error

end


简单示例

> =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以一种"保护模式"来调用第一个参数,因此pcall可以捕获函数执行中的任何错误。

通常在错误发生时,希望落得更多的调试信息,而不只是发生错误的位置。但pcall返回时,它已经销毁了调用桟的部分内容。Lua提供了xpcall函数,xpcall接收第二个参数——一个错误处理函数,当错误发生时,Lua会在调用桟展看(unwind)前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。

debug库提供了两个通用的错误处理函数:

debug.debug:提供一个Lua提示符,让用户来价差错误的原因
debug.traceback:根据调用桟来构建一个扩展的错误消息


>=xpcall(function(i) print(i) error('error..') end, function() print(debug.traceback()) end, 33)

33

stack traceback:

stdin:1: in function <stdin:1>

[C]: in function 'error'

stdin:1: in function <stdin:1>

[C]: in function 'xpcall'

stdin:1: in main chunk

[C]: in ?

false        nil

 类似资料:
  • 本文向大家介绍浅析Lua编程中的异常处理,包括了浅析Lua编程中的异常处理的使用技巧和注意事项,需要的朋友参考一下  需要进行错误处理 错误处理是必要的,因为真实世界中的操作通常需要使用复杂的操作,包括文件操作,数据库事务和web服务调用。没人关心错误的业务,涉及保密信息或金钱交易时造成大的损失。 在任何编程,总是有错误处理的要求。错误可以是两种类型,其中包括,     语法错误     运行时错

  • 问题内容: 我目前正在使用node.js应用程序,并且遇到了通常的异步代码问题。 我正在Node的HTTP模块之上实现服务服务器。 该服务器支持(类似表达)路由。例如,我有如下代码: 服务器需要能够承受故障,当传递给任何函数的问题出现时,我不想使整个服务器崩溃。当我编写如下代码时,会发生问题: 我看不到如何在这里捕获错误。我不想因一个服务器端故障而使服务器崩溃,而是要服务500个。 我能够提出的唯

  • 我使用JPA和Hibernate作为容器管理事务的提供者(JBossAS 6.1.0.Final)。 我正在尝试实现一些细粒度的异常处理,因为我的应用程序上有一个特定的异常层次结构,所以我可以定义在任何情况下要做什么。因此,我已经研究了几个小时,发现文档很模糊,示例也有些原始,因为“为了清晰起见”总是忽略异常处理,或者是一个简单的try-catch块,用于处理异常e。 例如,采用以下代码: cat

  • 问题内容: 我有一个ScheduledThreadPoolExecutor,似乎正在吃异常。如果提交的Runnable引发异常,我希望我的执行者服务通知我。 例如,我希望下面的代码至少输出IndexArrayOutOfBoundsException的stackTrace 作为附带问题。有没有办法为ScheduledThreadPoolExecutor编写常规try catch块? ////////

  • 本文向大家介绍Java 中的异常处理?相关面试题,主要包含被问及Java 中的异常处理?时的应答技巧和注意事项,需要的朋友参考一下  Java异常类层次结构图 在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大

  • 我创建了简单的MailService来通过电子邮件发送内容。它工作但我不知道如何处理异常(我的想法是在HTML视图中打印一些信息或在404页重定向) 邮件服务: 在控制器中的用法: