traperror

Захватите ошибки

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

traperror(object)
traperror(object, t)
traperror(object, MaxSteps = s)

Описание

traperror(object) ошибки прерываний производятся оценкой object.

traperror(object, t) делает то же самое. Кроме того, это останавливает оценку, если это не закончено после реального времени t секунды.

traperror ошибки прерываний вызываются оценкой объекта. Синтаксические ошибки, т.е. ошибки на парсинге объекта, не могут быть зафиксированы. То же самое сохраняется для фатальных ошибок, вызывающих завершение MuPAD®.

traperror возвращает код ошибки 0 если никакой ошибки не произошло. Кодом ошибки является 1320 если данное ограничение по времени t превышен (“Execution time exceeded”) и 1321 если данное количество “шагов выполнения” превышено. Кодом ошибки является 1028 если ошибка была повышена командой error.

Если traperror вызван числовым вторым аргументом, этот номер взят в качестве ограничения по времени, измеренного в секундах, “времени процесса” (см. документацию time функция для обсуждения этого термина).

При использовании опции MaxSteps = s, вызывающая сторона устанавливает ограничение по времени, которое не системно-зависимо, а скорее измеренное в терминах шагов оценки MuPAD.

Номер s не относится непосредственно к шагам оценки, а скорее к фиксированному (большому) количеству шагов, которые могут измениться от одного релиза MuPAD до следующего, но фиксируются в рамках одного релиза. Номер s дважды количество выходных параметров, вызванных Pref::report(9) для вычисления с помощью максимального времени позволен.

Если traperror нет времени предельный набор и “Execution time exceeded” ошибка повышена включением traperror(..., t) команда, затем эта ошибка не захватывается внутренним traperror. Это захватывается traperror вызовите, который установил ограничение по времени. См. Пример 5.

Объект может быть присвоением, которое, по синтаксическим причинам, должно быть заключено в дополнительные скобки. Следующий фрагмент кода демонстрирует типовое приложение traperror:

   if traperror((x := SomeErrorProneFunction())) = 0 then
        DoSomethingWith(x);
   else RespondToTheError();
   end_if;

Используйте lasterror воспроизвести захваченную ошибку.

Примеры

Пример 1

Ошибки, которые происходят во время выполнения функций ядра, имеют различные коды ошибок, в зависимости от проблемы. Например, “Division by zero” производит код ошибки 1025:

y := 1/x: traperror(subs(y, x = 0))

lasterror()
Error: Division by zero. [_power]

Пример 2

Все ошибки повысили использование функционального error имейте код ошибки 1028. Ошибки во время выполнения библиотечных функций являются этим видом:

traperror(error("My error!"))

lasterror()
Error: My error!

Пример 3

Мы пытаемся учесть полином, но сдаться после десяти секунд:

traperror(factor(x^1000 + 4*x + 1), 10)

lasterror()
 Error: Execution time exceeded;   Evaluating:
faclib::univ_mod_gcd 

Пример 4

Для использования в других стандартных программах желательно использовать MaxSteps вместо ограничения по времени, чтобы достигнуть сопоставимых результатов через медленнее и более быстрые машины:

traperror(factor(x^1000 + 4*x + 1), MaxSteps=10)

lasterror()
 Error: Execution MaxSteps exceeded [traperror];
  Evaluating: faclib::ddf 

Обратите внимание на то, что шаги оценки могут занять весьма различное количество времени, поэтому даже на той же машине, различные выражения, выполненные с тем же значением MaxSteps может быть отключен после совсем других отрезков времени:

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))

Пример 5

Здесь мы имеем два, вложил traperror вызовы. Внутренний вызов содержит неотключенный цикл, и внешний вызов имеет ограничение по времени 2 секунды. Когда время выполнения превышено, эта специальная ошибка не захватывается внутренним traperror вызвать. Из-за ошибки, print(1) никогда не выполняется:

traperror((traperror((while TRUE do 1 end)); print(1)), 2)

lasterror()
Error: Execution time exceeded.

Параметры

object

Любой объект MuPAD

t

Ограничение по времени: положительное целое число

s

Предел выполнения: положительное целое число

Возвращаемые значения

Неотрицательное целое число.

Смотрите также

Функции MuPAD