lua::error is Luacxx's main exception type for failures that occur while
working with Lua.
It is used for things like:
- Lua syntax errors
- Lua runtime errors
- type/conversion failures
- Luacxx API checks that are fundamentally about Lua values
Lua itself reports many failures through the C API and the Lua stack.
Luacxx converts those failures into a normal C++ exception type so they can be
handled with ordinary try / catch.
try {
lua::run_string(env, "error('Intentional')");
} catch (const lua::error& ex) {
std::cerr << ex.what() << '\n';
}lua::error stores both the main message and, when available, a traceback.
The key methods are:
what()message()traceback()set_traceback(...)
what() returns the full stored string. message() returns just the main
error text without the traceback suffix.
You can throw a lua::error directly from C++ binding code:
if (lua_type(state, 1) != LUA_TFUNCTION) {
throw lua::error("A function was expected");
}There is also a constructor that accepts a lua_State*, which Luacxx uses
when building richer messages from the current Lua context.
As a rule of thumb, lua::error is appropriate when the failure is naturally
part of using Lua:
- bad Lua code
- wrong Lua value type
- invalid Lua call target
- conversion failure
For purely host-side issues such as unrelated C++ logic failures, ordinary C++ exception types may still be more appropriate.
This is the common pattern:
try {
int answer = lua::call<int>(env["compute"], 2, 3);
} catch (const lua::error& ex) {
std::cerr << "Lua call failed: " << ex.message() << '\n';
if (!ex.traceback().empty()) {
std::cerr << ex.traceback() << '\n';
}
}