This functionality does not run in MATLAB.
MaxSteps = s)
traperror(object) traps errors produced by
the evaluation of
traperror(object, t) does the same. Moreover,
it stops the evaluation if it is not finished after a real time of
traperror traps errors caused by the evaluation
of the object. Syntactical errors, i.e., errors on parsing the object,
cannot be caught. The same holds true for fatal errors causing the
termination of MuPAD®.
traperror returns the error code
no error happened. The error code is
1320 if the
given time limit
t is exceeded ("
time exceeded") and
1321 if the
given number of "execution steps" is exceeded. The error
1028 if the error was raised by the command
traperror is called with a numerical second
argument, this number is taken as a time limit, measured in seconds,
of "process time" (see the documentation of the
time function for a
discussion of this term).
When using the option
MaxSteps = s, the caller
sets a time limit which is not system-dependent, but rather measured
in terms of MuPAD evaluation steps.
s does not refer
directly to evaluation steps, but rather to a fixed (large) number
of steps which may change from one MuPAD release to the next,
but is fixed within one release. The number
twice the number of outputs caused by
a calculation using the maximum time allowed.
traperror has no time limit set and an
Execution time exceeded" error is
raised by an enclosing
traperror(..., t) command,
then this error is not trapped by the inner
It is trapped by the
traperror call that has set
the time limit. Cf. Example 5.
The object can be an assignment which, for syntactical reasons,
must be enclosed in additional brackets. The following code fragment
demonstrates a typical application of
if traperror((x := SomeErrorProneFunction())) = 0 then DoSomethingWith(x); else RespondToTheError(); end_if;
reproduce the trapped error.
Errors that happen during the execution of kernel functions
have various error codes, depending on the problem. E.g., "
by zero" produces the error code 1025:
y := 1/x: traperror(subs(y, x = 0))
Error: Division by zero. [_power]
All errors raised using the function
error have the error code
Errors during the execution of library functions are of this kind:
Error: My error!
We try to factor a polynomial, but give up after ten seconds:
traperror(factor(x^1000 + 4*x + 1), 10)
Error: Execution time exceeded; Evaluating: faclib::univ_mod_gcd
For use inside other routines, it is preferable to use
of a time limit, to achieve consistent results across slower and faster
traperror(factor(x^1000 + 4*x + 1), MaxSteps=10)
Error: Execution MaxSteps exceeded [traperror]; Evaluating: faclib::ddf
Note that evaluation steps may take vastly different amounts
of time, so even on the same machine, different expressions evaluated
with the same value of
MaxSteps may be terminated
after very different lengths of time:
time(traperror(factor(x^1000 + 4*x + 1), MaxSteps=1)); time(traperror(while TRUE do 1 end_while, MaxSteps=1)); time(traperror(int(1/sqrt(1/r-1/r0), r=0..r0), MaxSteps=1))
Here we have two nested
The inner call contains an unterminated loop and the outer call has
a time limit of
2 seconds. When the execution time
is exceeded, this special error is not trapped by the inner
Because of the error,
print(1) is never executed:
traperror((traperror((while TRUE do 1 end)); print(1)), 2)
Error: Execution time is exceeded.
Any MuPAD object
The time limit: a positive integer
The execution limit: a positive integer