在 Vala 中使用 Glib.Settings 时如何处理错误?

ser*_*off 6 vala gsettings

我在 Vala 应用程序中使用 Glib.Settings。我想确保即使架构或密钥不可用,我的程序也能正常工作。所以我添加了一个 try/catch 块,但是如果我使用不存在的密钥,程序就会出现段错误。据我了解,它甚至没有到达 catch 语句。这是使用设置的函数:

GLib.Settings settings;
string token = "";
try 
{
    settings = new GLib.Settings (my_scheme);
    token = settings.get_string("token1");
}
catch (Error e) 
{
    print("error");
    token = "";
}
return token;
Run Code Online (Sandbox Code Playgroud)

程序输出为:

(main:27194): GLib-GIO-ERROR **: Settings schema 'my_scheme' does not contain a key named 'token1'
Trace/breakpoint trap (core dumped)
Run Code Online (Sandbox Code Playgroud)

(当然我使用的是我真正的方案字符串而不是 my_scheme)那么你能建议我哪里错了吗?

apm*_*ell 3

中的方法GLib.Settings,包括get_string不抛出异常,它们abort在库内部调用。这不是一个理想的设计,但您对此无能为力。

在这种情况下,正确的做法是修复您的架构,安装到该目录/usr/share/glib-2.0/schemas并在该目录上运行glib-compile-schemas(以 root 身份)。

Vala 仅具有检查异常,因此与 C# 不同,方法必须声明它将抛出,否则不可能这样做。您始终可以仔细检查 Valadoc 或 VAPI 来查看。