Saltar al contenido principal
LibreTexts Español

13.4: A2.4 Descifrando los mensajes de error de Matlab

  • Page ID
    151289
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Como se señaló en la sección anterior, los mensajes de error de Matlab suelen ser útiles cuando estás desarrollando una hipótesis sobre la causa de tu problema. En esta sección, haremos algunos ejercicios que están diseñados para ayudarte a aprender a descifrar estos mensajes.

    Antes de hacer los ejercicios, necesitamos dividir los problemas de software en tres categorías:

    • Se produce un error de sintaxis cuando el script contiene información que no es código legal de Matlab. A menudo, esto es el resultado de un error tipográfico (por ejemplo, una coma faltante). Cuando ejecuta un script, Matlab primero comprueba si hay errores de sintaxis y el script ni siquiera comenzará a ejecutarse si se detecta un error de sintaxis. En su lugar, se imprime un mensaje de error en la ventana de comandos.
    • Un error de tiempo de ejecución se produce cuando el código, aunque legal en su sintaxis, produce algún tipo de problema que hace que el script termine con un mensaje de error en la ventana de comandos. Por ejemplo, si el script intenta abrir un archivo con un nombre específico, pero no existe ningún archivo con ese nombre en el PATH, el script terminará con un mensaje de error.
    • Se produce un error lógico cuando el programa se ejecuta hasta su finalización sin un mensaje de error, pero el resultado es incorrecto. Esto generalmente significa que el código en el script no implementa correctamente los pasos de procesamiento deseados, pero a veces significa que los datos de entrada violan los supuestos del script.

    Tenga en cuenta que solo los errores de sintaxis y de tiempo de ejecución producen mensajes de error Los errores lógicos suelen ser los más difíciles de diagnosticar y resolver.

    Ahora es el momento de probar algunos ejercicios. Estos ejercicios requieren scripts y datos en la carpeta Apéndice_2 en la carpeta maestra: https://doi.org/10.18115/D50056.

    Ejercicio A2.1: Un error de sintaxis

    Inicie EEGLAB, haga Appendix_2 la carpeta actual y haga doble clic en Test_Case_1.m en el panel Carpeta actual de la GUI de Matlab. Esto debería abrir el script en el editor de Matlab. Es un guión muy sencillo, pero tiene un error. Haga clic en el botón Ejecutar en la ventana del editor para ejecutar el script. Debería ver el siguiente mensaje de error en la ventana de comandos:

    Error: Archivo: Test_Case_1.m Línea: 3 Columna: 30 El vector de
    caracteres no se termina correctamente.

    Este mensaje te indica dónde en el script detectó un problema (Línea 3, Columna 30), y te indica la naturaleza del problema (“El vector de caracteres no se termina correctamente”). Sin embargo, la naturaleza del problema se describe en Programmerese, por lo que es posible que no entiendas lo que significa el mensaje de error.

    Sin embargo, al menos te dice qué línea se estaba ejecutando cuando se generó el mensaje de error (Línea 3). Echa un vistazo a la Línea 3 del script Test_Case_1.m. Esta línea está tratando de abrir un conjunto de datos llamado 1_N170.set. Observe que el texto '1_N170.set); está subrayado en rojo. Esta es la forma de Matlab de decirte que piensa que esta parte del código es un error de sintaxis. Si pasa el mouse sobre esta parte del código, aparece un poco más de Programmerese, diciendo “Un vector de caracteres entre comillas no está terminado”. Aunque no entiendas completamente este mensaje, deberías poder inferir que hay algún problema con la terminación del nombre de archivo, 1_N170.set.

    Este nombre de archivo se especifica como una cadena de texto, y las cadenas de texto de Matlab deben estar encerradas en caracteres de comillas simples (por ejemplo, '1_N170.set'). De lo contrario, Matlab no sabe dónde comienza y se detiene la cadena. En este script, nos falta la comilla simple que termina la cadena. Eso es lo que quiere decir Matlab cuando te dice “El vector de personaje no se termina correctamente”. Este es un error muy común que cometí al menos una docena de veces al preparar los guiones en este libro.

    Intente agregar una sola comilla después de .set en el script. Verás que el subrayado rojo desaparece de debajo de esta cadena. Ahora intenta ejecutar el script. ¡Voila! No más mensaje de error.

    Si no puede encontrar un mensaje de error de esta manera, intente buscarlo en Google (por ejemplo, con la frase de búsqueda matlab “character Vector Is Not Terminated properly”). Cuando hice esto, encontré una página en stackallflow.com que proponía una buena solución.

    Ejercicio A2.2: Un error de sintaxis más sutil

    Cierre Test_Case_1.m y haga doble clic en Test_Case_2.m para cargarlo en el editor de Matlab. Haga clic en el botón Ejecutar en la ventana del editor para ejecutar el script. Debería ver el siguiente mensaje de error en la ventana de comandos:

    Archivo: Test_Case_2.m Línea: 4 Columna: 26 Expresión
    no válida. Al llamar a una función o indexar una variable, use paréntesis.

    De lo contrario, verifique si hay delimitadores no coincidentes.

    Echa un vistazo a la Línea 4 del guión. El mensaje de error dice que se trata de una “expresión inválida” —no muy informativa.

    ¿Ves algo marcado como problemático por Matlab en la ventana del editor? Si miras muy de cerca, verás que un corchete derecho cerca de la mitad de la línea está subrayado en rojo, al igual que un paréntesis derecho cerca del final de la línea. Matlab no está seguro de cuál de estas es la fuente del problema, así que ahora tienes dos hipótesis que examinar.

    Cuando hay problemas con corchetes o paréntesis (que Matlab llama “delimitadores”), esto generalmente significa que no están emparejados correctamente. Es decir, cada soporte izquierdo necesita un soporte derecho correspondiente. Para solucionar un problema como este, debes asegurarte de que cada delimitador tenga un par y que ambos delimitadores estén en los lugares correctos. Si miras de cerca la Línea 4, verás que hay un paréntesis izquierdo que está correctamente emparejado con el paréntesis derecho subrayado.

    Pero si miras los corchetes, verás que hay dos corchetes a la derecha y solo un corchete izquierdo. Esto significa que necesitas averiguar si nos falta un corchete izquierdo o si tenemos un corchete derecho que no debería estar ahí. En este caso, el problema es un soporte extra derecho. Intente eliminar el corchete derecho subrayado. Deberías ver que los subrayados rojos desaparecen, incluyendo el que está bajo el paréntesis derecho. Ahora intenta ejecutar el script. Ahora debería funcionar correctamente.

    Ejercicio A2.3: Un simple error de tiempo de ejecución

    Cierre Test_Case_2.m, haga doble clic en Test_Case_3.m y haga clic en el botón Ejecutar para ejecutar el script. Debería ver el siguiente mensaje de error en la ventana de comandos:

    Función no reconocida o variable 'EGG'.
    Error en Test_Case_3 (línea 4)
    [ALLEEG, EEG, CURRENTSET] = eeg_store (ALLEEG, EGG, 0);

    Este mensaje de error es en realidad razonablemente fácil de entender: Hay una variable llamada EGG en la Línea 4 que no se reconoce. Por lo general, hay dos posibles explicaciones para este tipo de problemas. La primera es que la variable está definida en la parte equivocada del programa, por lo que aún no se ha definido cuando Matlab intenta ejecutar la Línea 4. Simplemente puedes buscar la variable para ver si se define más adelante. La segunda explicación común es un error tipográfico simple. En este caso, es bastante claro que se supone que la variable se llama EEG, no EGG. Si cambias el nombre a EEG y ejecutas el script, encontrarás que el problema ha sido eliminado.

    Tenga en cuenta que Matlab no subraya ninguno de los códigos en el script cuando detecta este error. Eso es porque es un error de tiempo de ejecución en lugar de un error de sintaxis. En otras palabras, la Línea 4 es un código Matlab perfectamente legítimo cuando se considera de forma aislada. Es solo un problema en el contexto del resto del código (es decir, porque no se ha definido ninguna variable llamada EGG en líneas que se ejecutan antes de la Línea 4).

    Ejercicio A2.4: Un error de tiempo de ejecución ligeramente más complicado

    Cierre Test_Case32.m, haga doble clic en Test_Case_4.m y ejecute el script. Debería ver el siguiente mensaje de error en la ventana de comandos:

    Error al usar la carga
    No se puede encontrar el archivo o directorio
    '/Users/Luck/Dropbox/Research/Manuscripts/ERP_Analysis_Book/Appendix_2_Turobleshooting/exercises1_n170.set'.
    Error en pop_loadset (línea 139)
    TMPVAR = load ('-mat', nombre de archivo);
    Error en Test_Case_4 (línea 7)
    EEG = pop_loadset (' filename', Dataset_nombre_archivo);

    Este mensaje de error es un poco más complicado. El script llama a una función EEGLAB llamada pop_loadset, y Matlab realmente detectó el error mientras pop_loadset se estaba ejecutando. Por lo tanto, el mensaje de error le indica qué línea de pop_loadset se estaba ejecutando cuando se detectó el error, junto con la línea de Test_Case_4.m que llamó pop_loadset.

    Cuando recibe un mensaje de error como este, probablemente signifique que ha enviado algún tipo de datos no válidos a la función pop_loadset. Es posible que haya un error en una función EEGLAB o ERPLAB al que esté llamando, pero es mucho más probable que el problema se origine en su script. Sin embargo, si no puede resolver el problema mirando su script, es posible que desee abrir el script para la función a la que está llamando su script. Puedes hacerlo seleccionando el nombre de la función dentro de tu script, haciendo clic derecho sobre él y seleccionando Abrir “pop_loadset”.

    En realidad no voy a revelar aquí el problema con Test_Case_4.m. Eso se revelará en la siguiente sección.


    This page titled 13.4: A2.4 Descifrando los mensajes de error de Matlab is shared under a CC BY 4.0 license and was authored, remixed, and/or curated by Steven J Luck directly on the LibreTexts platform.