我正在尝试在与另一个也包含警告消息的函数(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”警告消息。 任何想法? 谢谢您的帮助。
答案 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>