Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2014

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: OnError [Thread"::"tdlen"]

  • To: mathgroup at smc.vnet.net
  • Subject: [mg132626] Re: OnError [Thread"::"tdlen"]
  • From: Bob Hanlon <hanlonr357 at gmail.com>
  • Date: Wed, 23 Apr 2014 04:53:28 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net
  • References: <20140411061209.CF9E86A3F@smc.vnet.net>

For your function define one or more messages for bad arguments. For
example,


ClearAll[factorial]


factorial::niarg = "The argument `1` cannot be a negative integer.";


Define your function to issue a message and return unevaluated upon an
error :


factorial[n_]/;If[

TrueQ[!NumericQ[n]||!(Element[n,Integers]&&n<0)],

True, Message[factorial::niarg,n]; False] :=

n!


BesselI[0,factorial[-1]]


factorial::niarg: The argument -1 cannot be a negative integer.


BesselI[0,factorial[-1]]


Use Check to do something other than return unevaluated (e.g., Abort) when
message is generated


Check[BesselI[0,factorial[-1]],Abort[]]


factorial::niarg: The argument -1 cannot be a negative integer.


$Aborted


PDF[NormalDistribution[m,0],x]


NormalDistribution::posprm: Parameter 0 at position 2 in
NormalDistribution[m,0] is expected to be positive. >>


PDF[NormalDistribution[m,0],x]


Check[PDF[NormalDistribution[m,0],x],Abort[]]


NormalDistribution::posprm: Parameter 0 at position 2 in
NormalDistribution[m,0] is expected to be positive. >>


$Aborted



Bob Hanlon




On Tue, Apr 22, 2014 at 5:09 AM, EMartin <eMartinSerrano at telefonica.net>wro=
te:

> Hi Bob,
>
>
>
> Thanks for your answer but =E2=80=98Check=E2=80=99 does not work as I exp=
ected, or I do
> not understand the cryptic direction in the help.
>
>
>
> "Check[expr, failexpr] evaluates =E2=80=98expr=E2=80=99, and returns the =
result (of expr),
> unless messages were generated, in which case it evaluates =E2=80=98faile=
xpr=E2=80=99 and
> returns the result of the evaluation of =E2=80=98failexpr=E2=80=99. "
>
>
>
> I tried so but I failed in dumpping the Stack[] contents, that I attempte=
d.
>
>
>
> 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 =E2=80=98line number=E2=80=99 which sometimes appears in the mes=
sages raised by
> the system is unreachable in practical terms for average users like me (o=
r
> 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 =E2=80=98old=E2=80=99 pieces of software, years ago (maybe ten), I wro=
te, 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 he=
lp
> 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>
> wrote:
>
> Hi,
>
> Many classic  programming languages provide a command to interrupt
> computations when some exception arises, allowing to perform any action o=
n
> 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 exceptio=
n
> (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 a=
nd
> 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 sole=
ly
> 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) mencionad=
as
> anteriormente y su contenido puede estar protegido por secreto profesiona=
l
> y
> en cualquier caso el mensaje en su totalidad est=E1  amparado y protegi=
do
> 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. S=
i usted
> recibe
> este correo electr=F3nico por error, gracias por informar  inmediatamen=
te
> 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 contenid=
o.
> Su contenido no constituye ning=FAn  compromiso para el remitente, salv=
o
> ratificaci=F3n escrita por ambas partes.  Aunque se esfuerza al m=E1x=
imo
> 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.
>
>
>




  • Prev by Date: Re: To combine separate Boxes by Show
  • Next by Date: Re: To combine separate Boxes by Show
  • Previous by thread: Re: OnError [Thread"::"tdlen"]
  • Next by thread: List vs. array in Mathematica