【问题标题】:Handle syntax errors in LuaInterface处理 LuaInterface 中的语法错误
【发布时间】:2012-11-29 21:37:21
【问题描述】:

我正在尝试使用 LuaInterface 将 Lua 脚本接口集成到我的 C# 项目中。

如果我执行语法正确的代码,它会按预期工作,但是一旦将语法错误(或任何其他看起来的错误)引入脚本,就会抛出SEHException,而没有任何有关错误的信息。

触发行为的简单示例:new LuaInterface.Lua().DoString("die");

这当然完全抵消了 Lua 的错误处理机制,对我来说是一个阻碍。

显然这是一个known bug,自 2011 年开始营业。

是否有任何变通方法,没有此错误的 LuaInterface 版本,或者是否有替代的 lua 包装器可以正确处理错误?

【问题讨论】:

    标签: c# error-handling lua syntax-error luainterface


    【解决方案1】:

    DoString 遇到的 Lua 错误(语法或运行时错误)应该会导致 LuaException 被抛出。它的消息将包含 Lua 生成的错误字符串。例如,给出你的例子:

    try
    {
        new LuaInterface.Lua().DoString("die");
    }
    catch (LuaException ex)
    {
        Console.WriteLine(ex.Message);
    }
    

    你应该得到以下错误:

    [string "chunk"]:1: '=' expected near '<eof>'
    

    您没有为您的一个班轮显示任何上下文。它是否包含在 try-catch 块中?

    如果是这样,也许是a bug?

    【讨论】:

    • 我的单行没有包裹在 try-catch 块中。即使我包装了它,异常仍然是 SEHException,而不是 LuaException,所以它不会被抛出。显然这是一个错误。现在问题仍然存在:如何解决它?
    • 好吧,当异常跨越 AppDomain 或托管/本机边界时,我禁用了 Debugging-Break 并使其正常工作。它不漂亮,但无论如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2015-05-25
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多