【发布时间】:2015-11-12 21:00:11
【问题描述】:
我的 matlab 程序是一个多窗口编程 GUI。我已经实现了一个报告系统,所以当遇到错误时,它会调用我编写的函数 generateReport.m,它会发送一封包含一些日志和状态信息的电子邮件,然后继续执行。
为了实现这一点,我在每个函数中都放置了一个 try-catch 块。这意味着甚至为我的主要功能创建一个包装器。有人知道避免这种情况的方法吗? IE。能够进行全球尝试。我现在需要多个 try-catch 块的原因是因为 try-catch 会捕获块内函数中的错误,但不会捕获这些函数的子函数
示例伪代码:
try:
segmentImage
catch:
generateReport
end
^-- 这样segment-image调用generateReport中的错误,但是segment-image的子函数中的错误不会。理想情况下,每个文件中只需要一个 try-catch(或我不知道的其他语句/结构)。
大多数文件都编码一个 GUI 窗口。有些只是实用程序。 之前写过类似的问题:matlab can't catch error in subfunction
该问题询问如何在回调中使用 try-catch 或一些函数包装器来实现我现在拥有的报告系统。在我只想知道为什么我无法捕获子函数中的错误之前。我在每个子函数中都放了 try-catch 来解决这个问题。
这个问题是不同的,因为我要问的是,是否有另一种方法可以做到这一点,而不是在每个函数和子函数中都放置一个 try-catch,这真的很不方便,而且看起来不太好。也许需要一种我不知道的技术或一种更有效的方式来构建我的代码来实现这一点?
多个 try-catch 的示例: 首先是我运行的 main 函数,它只是包装了 CSTMainWindow
function CeleST
try
% Global try-catch on CeleST
CSTMainWindow()
catch exception
generateReport(exception)
end
在 CSTMainWindow 内:我必须在它的子函数上放置 try-catch 块。在这个例子中,给定的 CSTProcessVideos 和 CSTCheckResults 是程序化的 GUI 文件
function processVideo(hObject,eventdata) %#ok<INUSD>
try
set(mainFigure,'Visible','off');
CSTProcessVideos
set(mainFigure,'Visible','on');
flagConsistentButton = false;
checkSequences
populateFilters
catch exception
generateReport(exception)
end
end
function checkResults(hObject,eventdata) %#ok<INUSD>
try
set(mainFigure,'Visible','off');
CSTCheckResults
set(mainFigure,'Visible','on');
flagConsistentButton = false;
checkSequences
populateFilters
catch exception
generateReport(exception)
end
end
我想知道是否可以采取一些措施来避免对所有内容都使用 try-catch(我还将 try-catch 块放在不包含在其他文件中编写的代码的子函数上)
我希望我的问题很清楚。提前感谢您的帮助
【问题讨论】:
-
在你之前的问题中回调的问题。现在你在谈论子函数,触发器是一个 catch 块。您能否在问题中添加一个最小示例来说明问题?