要求MATLAB在出现任何错误时发出嘟嘟声(或向我发送电子邮件)

要求MATLAB在出现任何错误时发出嘟嘟声(或向我发送电子邮件),matlab,Matlab,我有两个MATLAB函数: 通过电子邮件给我发送此(文本) beep\u现在 我可以打电话给我发送一个字符串并在电脑上发出嘟嘟声 当MATLAB中的脚本执行出现问题时,我想调用这些函数。我想我可以用一个try-catch块来实现这一点,但我想知道是否有其他方法可以在整个MATLAB会话中在一般级别强制实现这一点。您可能会使函数过载。因此,您的代码将在Matlab抛出的每个错误上执行 function error(varargin) %# email message. Note that va

我有两个MATLAB函数:

  • 通过电子邮件给我发送此(文本)
  • beep\u现在
我可以打电话给我发送一个字符串并在电脑上发出嘟嘟声


当MATLAB中的脚本执行出现问题时,我想调用这些函数。我想我可以用一个
try-catch
块来实现这一点,但我想知道是否有其他方法可以在整个MATLAB会话中在一般级别强制实现这一点。

您可能会使函数过载。因此,您的代码将在Matlab抛出的每个错误上执行

function error(varargin)
%# email message. Note that varargin{2} contains error information, unless there is
%# only one input that is a structure.
email_me_this('there has been an error')
beep_now
%# call the builtin function error.m
builtin('error',varargin{:})

您可以重载该函数。因此,您的代码将在Matlab抛出的每个错误上执行

function error(varargin)
%# email message. Note that varargin{2} contains error information, unless there is
%# only one input that is a structure.
email_me_this('there has been an error')
beep_now
%# call the builtin function error.m
builtin('error',varargin{:})

嗯,当我现在调用
beep_
时,如果我过载
error
函数
???已达到最大递归限制500。使用set(0,'RecursionLimit',N)更改限制。请注意,超出可用堆栈空间可能会使MATLAB和/或计算机崩溃。
事实上,我注意到,如果在重载函数
error.m
中有以下行:
disp('error')
,我看到在正常操作(例如,使用
Ctrl-D
打开文件)上打印的“error”一词。@intrpc:如果您对
beep_now
的调用产生错误,它将调用error,它将调用
beep_now
,它将产生错误,等等。因此,您应该重命名我们的
error
函数,并确保beep_现在可以正常工作。此外,许多函数抛出错误,然后try/catch语句捕获错误。不幸的是,当这种情况发生时,您的重载函数也会被执行。谢谢@Jonas。我检查了一下,
beep\u现在
如果不过载
error
函数,它本身就可以正常工作
beep_now
是一个小脚本,它只运行以下命令:
intensity=0.15;播放器=音频播放器(强度*sin(0:0.5:(0.35e3*2*pi)),4*8192);玩(玩家)。还有一点很奇怪,就是当我按Ctrl-D键在编辑器上打开文件时,错误函数也会执行,不是吗?也许MATLAB依赖于
try catch
来查找文件?@Jonas:恐怕只有在脚本/函数中显式调用ERROR函数时,这才有效。。例如,尝试读取一个不存在的文件:
fid=fopen('doesnu-exist','r');数据=fread(fid)(即使重载了error.m,仍会抛出标准错误)@intrpc:NARGCHK经常与ERROR函数一起使用,以检查函数中输入参数的正确数量。如果NARGCHK返回空字符串,它希望它不会抛出错误。这只是许多例子中的一个,我认为这种方法是非常有问题的,会给你带来很多麻烦。。。只需使用try/catchhmm,如果我过载
error
函数
,我现在调用
beep_
时会出现以下错误???已达到最大递归限制500。使用set(0,'RecursionLimit',N)更改限制。请注意,超出可用堆栈空间可能会使MATLAB和/或计算机崩溃。
事实上,我注意到,如果在重载函数
error.m
中有以下行:
disp('error')
,我看到在正常操作(例如,使用
Ctrl-D
打开文件)上打印的“error”一词。@intrpc:如果您对
beep_now
的调用产生错误,它将调用error,它将调用
beep_now
,它将产生错误,等等。因此,您应该重命名我们的
error
函数,并确保beep_现在可以正常工作。此外,许多函数抛出错误,然后try/catch语句捕获错误。不幸的是,当这种情况发生时,您的重载函数也会被执行。谢谢@Jonas。我检查了一下,
beep\u现在
如果不过载
error
函数,它本身就可以正常工作
beep_now
是一个小脚本,它只运行以下命令:
intensity=0.15;播放器=音频播放器(强度*sin(0:0.5:(0.35e3*2*pi)),4*8192);玩(玩家)。还有一点很奇怪,就是当我按Ctrl-D键在编辑器上打开文件时,错误函数也会执行,不是吗?也许MATLAB依赖于
try catch
来查找文件?@Jonas:恐怕只有在脚本/函数中显式调用ERROR函数时,这才有效。。例如,尝试读取一个不存在的文件:
fid=fopen('doesnu-exist','r');数据=fread(fid)(即使重载了error.m,仍会抛出标准错误)@intrpc:NARGCHK经常与ERROR函数一起使用,以检查函数中输入参数的正确数量。如果NARGCHK返回空字符串,它希望它不会抛出错误。这只是许多例子中的一个,我认为这种方法是非常有问题的,会给你带来很多麻烦。。。使用try/catchtry-catch确实是最好的选择。你有什么理由不想用它吗?试抓真的是最好的选择。你为什么不想用它?