2011-01-19 31 views
12

Por ejemplo, quiero ver una excepción couldn't-read-a-file-at-that-path de imread(). Puedo hacer esto.¿Existe alguna referencia autorizada sobre qué excepciones pueden arrojarse por las funciones incorporadas de Matlab?

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 

Pero las únicas formas que conozco para descubrir la cadena mágica para comparar con ('MATLAB: imread: fileOpen' en este caso), son:

  1. causa del error, detectar la excepción , y mira el identificador. Pero llevaría mucho tiempo hacer esto bien. Por ejemplo, ¿Matlab usa un identificador de excepción diferente si el archivo existe pero no es realmente un archivo de imagen? ¿Qué tal si existe pero no tengo permiso de lectura? ¿Qué pasa si es un directorio?

  2. Mire el código fuente. imread() está escrito en Matlab, así que esto es posible, pero no sería para otras funciones. Y, por supuesto, imread() llama a otras funciones que no están escritas en Matlab, y podrían surgir excepciones de ellas.

¿Hay alguna manera autorizada de saber todas las excepciones que imread() puede arrojar? Espero que esto esté en la documentación en alguna parte, pero no puedo encontrarlo.

+1

Posible duplicado: [MATLAB: una referencia sobre los mensajes de error] (http://stackoverflow.com/questions/4562698/matlab-a-reference-about-error-messages) – gnovice

+0

¿Por qué importa qué excepción se arroja? Funcionó o no funcionó, ¿verdad? – MatlabDoug

+0

Una mejor pregunta: ¿por qué necesita identificar el error con tanta especificidad, cuando todo lo que realmente está haciendo con él es efectivamente volver a lanzarlo? – gnovice

Respuesta

0

Busco eso, y no encontré nada ... Lo único que veo que podría ayudarlo, sería analizar el código fuente de imread, que no creo que sea posible. Sin embargo, siempre puedes intentar ver el código fuente de la misma función en Octave, ya que es casi lo mismo (supongo).

0

Si usted está dispuesto a enumerar los archivos para generar su propia referencia, trate

grep -r "MATLAB:" <matlab root> 

se obtendrá una lista larga ... pero parece que los errores son o bien lanzados por error() o mexErrMsgIdAndTxt. Esos más nombres de funciones te permiten ser más específico. Bastante lento sin embargo.

grep también observarán que algunos archivos binarios coinciden. Alimentarlo -a y podrá extraer los mensajes de error de muchos de ellos.

1

No, no lo hay.

El problema es que incluso si hubiera una referencia autorizada sobre lo que arroja una función determinada en MatLab, podría cambiar de una versión a otra. Entonces, incluso si pudieras hacerlo, probablemente no deberías.

Recomendaría solo buscar los que sabe que puede manejar, y generar algunos errores genéricos para otros (o reutilizar lo que MatLab le da).


Algunos comentarios basados ​​en otros idiomas/marcos:

En .NET, la única lista de excepciones que pueden ser lanzadas desde un método, es en la documentación, y no se les gustaba el código fuente. Estos a menudo están desactualizados, son inválidos e incompletos.

En Java, puede especificar qué excepción se arroja de qué método. Esto es verificado por el compilador y, por lo tanto, el compilador puede construir una referencia autorizada.MatLab carece de dicha característica, por lo tanto, lo mejor que puede hacer es buscar como se describe en otras respuestas.

Cuestiones relacionadas