如何在Matlab中嵌入另一个函数的函数中捕获警告消息

时间:2019-04-15 13:13:51

标签: matlab

我正在尝试在与另一个也包含警告消息的函数(testB)一起嵌入的函数(testA)中捕获警告消息。当我尝试在testA中捕获警告消息时,未生成ME变量。 为了简化,我定义了两个测试: 测试A

function testA()
    warning('testA');
    testB();
end

TestB

function testB()
    warning('testB');
end

我已经尝试过:

w = warning ('off','all');%%
try
    testA()
catch ME
    assert(length(ME.message) > 0)
end
w = warning ('on','all');

以及最后警告

lastwarn('');

% Do your fitting
    testA()

% Check which warning occured
 [msgstr, msgid] = lastwarn;
switch msgid
   case 'testA'
   error(msgstr);
end

但是我在msgstr中得到了最后一条警告消息,即“ testB”,我需要获得“ Test A”警告消息。 任何想法? 谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您无法通过编程很好地做到这一点。警告并非真正针对控制流。

您无法使用SELECT *, to_jsonb(dra)->>ds."List1Left" FROM "DocumentSubject" ds LEFT JOIN "DocumentRegistryAttributes" dra ON dra."DocumentSubjectId" = ds."Id"; / try捕获警告。那只是为了错误(又称“例外”)。

如果这是您的代码,则最好的办法是修改catch,以使其返回有关其引发的警告或这些警告指示的条件的附加输出参数。然后让您的testB将它们以某种结构传递给另一个输出参数。

如果您只是想在调试器中停止警告,则可以通过在警告中添加 identifiers ,仅禁用testA中的警告,然后执行testA

dbstop if warning

然后:

function testA()
    warning('myproject:TestA', 'testA');
    testB();
end

function testB()
    warning('myproject:TestB', 'testB');
end

如果您真的想以编程方式获取警告,请使用相同的方法向警告中添加标识符,仅禁用warning off myproject:TestA dbstop if warning testA ,然后使用myproject:TestA捕获确实出现的警告。 / p>