Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Exception 关于Matlab'可以引发哪些异常,是否有权威参考;s的内置功能?_Exception_Matlab - Fatal编程技术网

Exception 关于Matlab'可以引发哪些异常,是否有权威参考;s的内置功能?

Exception 关于Matlab'可以引发哪些异常,是否有权威参考;s的内置功能?,exception,matlab,Exception,Matlab,例如,我想从imread()捕获无法读取该路径的文件异常。我能做到 imagePath = 'a_picture.jpg'; try im = imread(imagePath); catch exception if strcmp(exception.identifier, 'MATLAB:imread:fileOpen') fprintf('Couldn''t open %s.\n', imagePath); im = []; else

例如,我想从imread()捕获无法读取该路径的文件异常。我能做到

imagePath = 'a_picture.jpg';
try
    im = imread(imagePath);
catch exception
    if strcmp(exception.identifier, 'MATLAB:imread:fileOpen')
        fprintf('Couldn''t open %s.\n', imagePath);
        im = [];
    else
        fprintf('Unexpected error (%s): %s\n', ...
                exception.identifier, exception.message);
        throw(exception);
    end
end
但我所知道的发现要与之比较的神奇字符串的唯一方法(“本例中为MATLAB:imread:fileOpen”)是:

  • 导致错误,捕获异常,并查看标识符。但要做到这一点需要很长时间。例如,如果文件存在但实际上不是图像文件,Matlab是否使用不同的异常标识符?如果它存在,但我没有阅读权限呢?如果是目录呢

  • 看看源代码。imread()是用Matlab编写的,所以这是可能的,但对于其他函数来说是不可能的。当然,imread()调用其他不是用Matlab编写的函数,异常可能会从中冒出来


  • 有没有权威的方法让我知道imread()可以抛出的所有异常?我希望这是在某个地方的文档中,但我找不到它。

    我搜索了它,但没有找到任何东西。。。我看到的唯一能帮助你的是分析
    imread
    的源代码,我认为这是不可能的。但是,您始终可以尝试在中查看相同函数的源代码,因为它几乎相同(我认为)。

    如果您愿意枚举文件以生成自己的引用,请尝试

    grep -r "MATLAB:" <matlab root>
    
    grep-r“MATLAB:
    
    您将得到一个很长的列表…但似乎错误是由
    error()
    mexErrMsgIdAndTxt
    引发的。这些加上函数名可以让您更加具体。不过速度很慢

    grep
    还将注意到一些二进制文件匹配。向它馈送
    -a
    ,它将能够从许多错误消息中提取错误消息。

    不,没有

    问题是,即使在MatLab中有一个关于给定函数抛出内容的权威参考,它也可能会随着版本的变化而变化。所以即使你能做到,你也不应该

    我建议只检查那些您知道可以处理的错误,并为其他错误生成一些通用错误(或者重用MatLab提供的错误)


    基于其他语言/框架的一些评论:

    在.NET中,唯一可以从方法抛出的异常列表在文档中,源代码不喜欢。这些文件通常过时、无效且不完整


    在Java中,您可以指定从什么方法引发什么异常。这将由编译器验证,因此编译器可以构建权威引用。MatLab缺少这一功能,因此您最好按照其他答案中所述进行搜索。

    可能重复:@gnovice&MatlabDoug-在这种情况下,这可能无关紧要,但您可能需要根据错误类型进行变量处理。如果这不重要,为什么Matlab推荐并使用错误ID?顺便说一句,我不认为这是重复的。他想要一份什么扔什么的参考资料。另一个问题问他们是什么意思。要获得一个全面的错误列表,请注意,每个matlab错误消息都以matlab开头:--您应该能够在读取x时执行类似于find/Applications/matlab_R2010b.app/|的操作;做echo$x;字符串$x | grep“MATLAB:”;done@gnovice,我不是MATLAB专家,但在我看来,他挑出了一个特殊的例外,不重新抛出它。