Hi Bob,
Thanks for your answer but 'Check' does not work as I expected, or I do not
understand the cryptic direction in the help.
"Check[expr, failexpr] evaluates 'expr', and returns the result (of expr),
unless messages were generated, in which case it evaluates 'failexpr' and
returns the result of the evaluation of 'failexpr'. "
I tried so but I failed in dumpping the Stack[] contents, that I attempted.
The key point is that Mathematica should return (or empowered the programmer
to handle) the whole context where an error is produced, note that the 'line
number' which sometimes appears in the messages raised by the system is
unreachable in practical terms for average users like me (or at least to
costly); it is one of those Mathematica arcane. Is there any facility to, at
least, get such line numbers?
As an example of the problem I am facing to bring to work a great deal of my
'old' pieces of software, years ago (maybe ten), I wrote, and submitted to
Mathgroup, a routine to catch improper function calls (calls with faulty
actual parameters). It was not about catching the point where the error
comes up but about why the error takes place due to a function call with
data generated somewhere else. The routine damped the Stack[] to help in
rebuilding the whole context as to do some sort of forensic analysis since
the source of the error can be truly far away from the point where the
conflict is discovered.
But thanks again Bob
E. Martin-Serrano
De: Bob Hanlon [mailto:hanlonr357 at gmail.com]
Enviado el: viernes, 11 de abril de 2014 15:34
Para: EMartin
CC: MathGroup
Asunto: Re: OnError [Thread"::"tdlen"]
"Check[expr, failexpr] evaluates expr, and returns the result, unless
messages were generated, in which case it evaluates and returns failexpr. "
Bob Hanlon
On Fri, Apr 11, 2014 at 2:12 AM, EMartin <eMartinSerrano at telefonica.net
<mailto:eMartinSerrano at telefonica.net> > wrote:
Hi,
Many classic programming languages provide a command to interrupt
computations when some exception arises, allowing to perform any action on
the exception as in something as, for example:
OnError [] do (action)] [routine] (*This could be the general pattern*)
OnError [] do (Print[Stack]; Abort[] ) [routine] (*This could be a more
specific pattern*)
OnError [Thread"::"tdlen"] do JumpToCheck ][routine]
(*The above could be a more specific but even more general pattern. The jump
made to an exception handling routine to evaluate or treat the exception*)
These catching commands should be located at the beginning of the whole
code as in *TimeConstrained[routine, time]* which aborts the routine if it
takes more than time seconds.
Mathematica has got enough stuff to deal with erroneous situation (Abort,
Interrupt, Catch, Throw,=85) provided one is able to catch the exception
(and
its type) as soon as it arises , but I never was able to do it.
Since Mathematica prints the errors messages, the type of the exception and
the exact point where it arises is available (but hidden) to let the user to
take control. Probably the tool is already available but I can find it.
Any help will be welcome
E. Martin-Serrano
__________________________________________
This e-mail and the documents attached are confidential and intended solely
for the addressee; it may also be privileged. If you receive this e-mail in
error, please notify the sender immediately and destroy it. As its integrity
cannot be secured on the Internet, no sender92s liability can be = triggered
for the message content. Although the sender endeavors to maintain a
computer virus-free network, he/she does not warrant that this transmission
is virus-free and will not be liable for any damages resulting from any
virus transmitted.
Este mensaje y los ficheros adjuntos pueden contener
informaciF3nconfidencial destinada solamente a la(s) persona(s) mencionadas
anteriormente y su contenido puede estar protegido por secreto profesional y
en cualquier caso el mensaje en su totalidad est=E1 amparado y protegido
por
la legislaci=F3n vigente que preserva el secreto de las comunicaciones, y
por
la legislaci=F3n de protecci=F3n de datos de car=E1cter personal. Si usted
recibe
este correo electr=F3nico por error, gracias por informar inmediatamente al
remitente y destruir el mensaje. Al no estar asegurada la integridad de este
mensaje sobre la red, el remitente no se hace responsable por su contenido.
Su contenido no constituye ning=FAn compromiso para el remitente, salvo
ratificaci=F3n escrita por ambas partes. Aunque se esfuerza al m=E1ximo por
mantener su red libre de virus, el emisor no puede garantizar nada al
respecto y no ser=E1 responsable de cualesquiera da=F1os que puedan resultar
de
una transmisi=F3n de virus.