Mensaje de error: ¿qué línea?JMP ayuda al usuario a encontrar errores en el código. Si se utiliza un nombre sin resolver en el código, JMP detiene la evaluación y muestra un mensaje de error que indica la línea de código errónea.
print(1);
result = x + zzz_missing;

Hagamos un pequeño cambio en el código. Cuando JMP ejecuta este código
myFunc = Function( {x},
{},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );
Devuelve nuevamente un mensaje de error:

Pero apunta a la línea 3 del código donde se define x. Esto es muy sorprendente: el error ocurre en la línea 4: el usuario omitió una expresión de nombre (expr()) para proteger el resultado , ¡y JMP evalúa la expresión accidentalmente!
Como ya hemos comentado este comportamiento en otro post ( Rastreo de errores: JMP intenta "ayudar" ), pasaremos directamente a la siguiente sorpresa.
De hecho, aún más sorprendente es el mensaje de error de este código:
myFunc = Function( {x},
{Default Local},
result = x + zzz_missing;
Return( result );
);
myFunc( 3 );

-> ¡¿No hay información sobre la línea!? - ni siquiera una incorrecta.
¿por qué?
Automatización y scriptingRe: Mensaje de error: ¿qué línea?La misma restricción con Try(): no hay información sobre la línea de código
Try(
result = zzz_missing;
Print( 1 );
,
Print( exception_msg )
);

Re: Mensaje de error: ¿qué línea?¿Hay algún comando?
- como Captura de registro() o Intentar() - que no se detiene cuando hay un error en la expresión adjunta
- ¿cuál devuelve la línea de código que produce el error?
Re: Mensaje de error: ¿qué línea?Captura de registros
Según el índice de scripts, captura la salida en el registro y la devuelve como una cadena.

¡Pero hace más que eso!
Actúa como intentar() y permite que la ejecución del código continúe después de un error fatal dentro de la expresión evaluada.
log=Log capture(
result = zzz_missing;
print(1)
);
Print(2);
Show(log)
Se omite imprimir(1) - se ejecuta imprimir(2) .

Casi perfecto. ¡Por desgracia, se olvida de escribir la línea de código donde se produce el error!
Re: Mensaje de error: ¿qué línea?Ah: Tipos de error de Vince Faller

@Ryan_Gilmore , ¿podrías reactivar el deseo de votar?
@Ben_BarrIngh , @russ_wolfinger , para su información.
Re: Mensaje de error: ¿qué línea?Tal vez combine la solicitud con esta:
Seguimiento de pila JSL mejorado en caso de error de inicio de sesión
Re: Mensaje de error: ¿qué línea?Por cierto, ¿alguien sabe qué se devuelve en el mensaje de excepción?

1?
2?
Re: Mensaje de error: ¿qué línea?¿Puede un código JSL desencadenar una ejecución "secundaria", que podría morir con un mensaje de error sobre la línea de error?
¿Y el código principal aún sobrevive y se ejecuta aún más, ya sea cuando la ejecución secundaria finaliza o cuando la ejecución secundaria finaliza?
Re: Mensaje de error: ¿qué línea?// demo command
MyExpr = Expr(
Print( 1 );
z = 5;
x = xyz;
Print( 2 );
);
stopnow = 0; // if there is an error, don't execute subsequent blocks of code
summary = "";
// execute blocks of code and collect replies and error messages
For Each( {part, line}, Name Expr( myExpr ),
Try(
Eval( Name Expr( part ) );
new = "";
,
new = "part " || Char( line ) || ": " || Char( Name Expr( part ) ) || "\!n" || Char( exception_msg );
stopNow = 1;
);
Wait( 0 );
summary = summary || new || (tmp = Char( Get Log( -1 )[1] ) ; If( tmp == "/*:", "", "\!N" || tmp || "\!N" ));
Clear Log();
If( stopnow, break() );
);
Show(summary);

Supone un código trivial con <=1 respuesta por bloque de código.
Se puede ampliar fácilmente para trabajar con código más complicado.