第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些区别。
第四版针对 Lua 5.3,可以在 亚马逊 和其他书店购买。
购买本书,您还可以帮助支持 Lua 项目。
用 Lua 编程 | ||
第一部分。语言 第 8 章。编译、执行和错误 |
对于许多应用程序,您无需在 Lua 中执行任何错误处理。通常,应用程序会执行此处理。所有 Lua 活动都从应用程序的调用开始,通常要求 Lua 运行一个块。如果发生任何错误,此调用将返回一个错误代码,应用程序可以采取适当的措施。对于独立解释器,其主循环只会打印错误消息,然后继续显示提示并运行命令。
如果您需要在 Lua 中处理错误,您应该使用 pcall
函数(受保护的调用)来封装您的代码。
假设您想运行一段 Lua 代码,并捕获运行该代码时引发的任何错误。您的第一步是将该段代码封装在一个函数中;我们称之为 foo
function foo () ... if unexpected_condition then error() end ... print(a[i]) -- potential error: `a' may not be a table ... end然后,您使用
pcall
调用 foo
if pcall(foo) then -- no errors while running `foo' ... else -- `foo' raised an error: take appropriate actions ... end当然,您可以使用匿名函数调用
pcall
if pcall(function () ... end) then ... else ...
pcall
函数以受保护模式调用其第一个参数,以便在函数运行时捕获任何错误。如果没有错误,pcall
返回 true,以及调用返回的任何值。否则,它返回 false,以及错误消息。
尽管其名称如此,但错误消息不必是字符串。您传递给 error
的任何 Lua 值都将由 pcall
返回
local status, err = pcall(function () error({code=121}) end) print(err.code) --> 121这些机制提供了我们在 Lua 中执行异常处理所需的一切。我们使用
error
抛出异常,并使用 pcall
捕获异常。错误消息标识错误的类型或错误。
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |