Обработайте ошибки

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

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

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

traperror функция возвращает код ошибки вместо самой ошибки. Позже, можно воспроизвести ошибку при помощи lasterror функция. Эта функция производит последнюю ошибку, которая произошла на текущем сеансе MuPAD. Если вы вызываете lasterror в операторе или процедуре, это отключает тот оператор или процедуру. Если вы хотите отобразить сообщение об ошибке, не выдавая саму ошибку, сохраните код ошибки, возвращенный traperror, и затем получите сообщение при помощи getlasterror функция.

Например, функциональный f выдает ошибку, когда sin (π   k) равен нулю:

f := (k) -> 1/sin(PI*k)

f(1)
Error: Division by zero. [_invert]
  Evaluating: f

Предположим, что вы хотите вычислить f для значений - π ≤ k ≤ π увеличение значения k на каждом шаге. Вызывать функциональный f для всех необходимых значений создайте for цикл. Когда вы пытаетесь выполнить этот оператор, он завершает работу как только функциональный f деление на нуль обнаружения впервые. Постараться не отключать for оператор, используйте traperror функция, чтобы зафиксировать ошибку. Отобразить текст того сообщения об ошибке, не прерывая выполнение for оператор, используйте getlasterror():

for k from -1 to 1 step 1/4 do
  err := traperror(f(k)):
  if err = 0 then
    print(Unquoted, "k = ".expr2text(k), "f = ".expr2text(f(k)))
  else 
    print(Unquoted, "k = ".expr2text(k), getlasterror())
  end_if
end_for
k = -1, [1025, Error: Division by zero. [_invert]]
                 Evaluating: f
k = -3/4, f = -2^(1/2)
k = -1/2, f = -1
k = -1/4, f = -2^(1/2)
k = 0, [1025, Error: Division by zero. [_invert]]
                Evaluating: f
k = 1/4, f = 2^(1/2)
k = 1/2, f = 1
k = 3/4, f = 2^(1/2)
k = 1, [1025, Error: Division by zero. [_invert]]
                Evaluating: f

Для ошибок, созданных с error функция, включая ваши пользовательские сообщения об ошибке, traperror всегда возвращает код ошибки 1028. Если сообщение об ошибке с кодом 1028 является последним сообщением об ошибке, которое произошло на сеансе MuPAD, можно получить то сообщение об ошибке при помощи lasterror или getlasterror. Например, создайте процедуру g это вычисляет факториал любого номера меньше чем 10. Если вы передаете номер, больше, чем 10 к этой процедуре, процедура сокращает количество к 10, и затем вычисляет факториал:

g := proc(n:Type::PosInt)
local test;
begin
  test := proc()
    begin
      if n > 10 then
        error("The number must not exceed 10.")
      end_if
  end_proc:
  if traperror(test(n)) <> 0 then
    g(n - 1)
  else
    n!
  end_if;
end_proc:

Вызовите процедуру с номером 100. В течение времени выполнения процедура сталкивается с ошибкой, но не завершает работу. Это также не отображает сообщение об ошибке. Вместо этого это возвращает результат:

g(100)

Получить и отобразить сообщение об ошибке отловили во время осуществления процедуры g, используйте lasterror функция:

lasterror()
Error: The number must not exceed 10. [test]

Чтобы отобразить код ошибки и текст того сообщения, используйте getlasterror функция:

g(100):
getlasterror()

Для просмотра документации необходимо авторизоваться на сайте