Main Content
Note
As of version 7.5, MATLAB® supports error handling that
is based on the MException
class. Calling rethrow
with
a structure argument, as described on this page, is now replaced by
calling rethrow with an MException
object, as described
on the reference page for rethrow
. rethrow
called with
a structure input will be removed in a future version.
Syntax
rethrow(errorStruct)
Description
rethrow(errorStruct)
reissues the error specified by errorStruct
. The
currently running function terminates and control returns to the keyboard
(or to any enclosing catch
block). The errorStruct
argument
must be a MATLAB structure containing at least the message
and identifier
fields:
Fieldname |
Description |
---|---|
message |
Text of the error message |
identifier |
Identifier for the error |
stack |
Information about the error from the program stack |
For information about error identifiers, see MException
.
Examples
rethrow
is usually used in conjunction with try, catch
statements
to reissue an error from a catch
block after performing catch
-related
operations. For example,
try do_something catch do_cleanup rethrow(previous_error) end
Tips
The errorStruct
input can contain the field stack
,
identical in format to the output of the dbstack
command.
If the stack
field is present, the stack of the
rethrown error will be set to that value. Otherwise, the stack will
be set to the line at which the rethrow occurs.
Extended Capabilities
Thread-Based Environment
Run code in the background using MATLAB® backgroundPool
or accelerate code with Parallel Computing Toolbox™ ThreadPool
.
This function fully supports thread-based environments. For
more information, see Run MATLAB Functions in Thread-Based Environment.
Version History
Introduced before R2006a
Main Content
Generate, catch, and respond to warnings and errors
To make your code more robust, check for edge cases and problematic
conditions. The simplest approach is to use an if
or
switch
statement to check for a specific condition,
and then issue an error or warning. try/catch
statements
allow you to catch and respond to any error.
MATLAB Language Syntax
try, catch |
Execute statements and catch resulting errors |
Functions
error |
Throw error and display message |
warning |
Display warning message |
lastwarn |
Last warning message |
assert |
Throw error if condition false |
onCleanup |
Cleanup tasks upon function completion |
Topics
- Issue Warnings and Errors
To flag unexpected conditions when running a program, issue a warning. To flag
fatal problems within the program, throw an error. Unlike warnings, errors halt
the execution of a program. - Suppress Warnings
Your program might issue warnings that do not always adversely affect
execution. To avoid confusion, you can hide warning messages during execution by
changing their states from'on'
to
'off'
. - Restore Warnings
You can save the warning current states, modify warning states, and restore
the original warning states. This technique is useful if you temporarily turn
off some warnings and later reinstate the original settings. - Change How Warnings Display
You can control how warnings appear in MATLAB®, including the display of warning suppression information and
stack traces. - Use try/catch to Handle Errors
Use a
try/catch
statement to execute code after your
program encounters an error. - Clean Up When Functions Complete
It is a good programming practice to leave your program environment in a clean
state that does not interfere with any other program code.
Обзор
Неважно, как тщательно вы планируете и тестируете программы, которые вы написали, они не могут всегда запускаться так же гладко как ожидалось, когда выполняется при различных условиях. Это всегда — хорошая идея включать проверку ошибок в программы, чтобы гарантировать надежную операцию при всех условиях.
В MATLAB® программное обеспечение, можно решить, как программы отвечают на различные типы ошибок. Можно хотеть предложить пользователю более вход, отображение расширенная ошибка или предупреждение информации, или возможно повторить вычисление с помощью значений по умолчанию. Возможности обработки ошибок в MATLAB помогают вашей проверке программ на особое состояние ошибки и выполняют соответствующий код в зависимости от ситуации.
То, когда MATLAB обнаруживает серьезный отказ в команде или программе, это запускается, это собирает информацию о том, что происходило во время ошибки, отображает сообщение, чтобы помочь пользователю изучить то, что пошло не так, как надо и отключает команду или программу. Это называется throwing an exception. Можно получить исключение при вводе команд в командной строке MATLAB или при выполнении кода программы.
Получение исключения в командной строке
Если вы получаете исключение в подсказке MATLAB, у вас есть несколько опций о том, как иметь дело с нею аналогичный описанному ниже.
Определение отказа из сообщения об ошибке
Выполните сообщение об ошибке, которое отобразил MATLAB. Большинство сообщений об ошибке пытается объяснить, по крайней мере, мгновенную причину отказа программы. Часто существует достаточная информация, чтобы определить причину и что необходимо сделать, чтобы исправить ситуацию.
Рассмотрение провального кода
Если функция, в которой произошла ошибка, реализована как файл программы MATLAB, сообщение об ошибке должно включать линию, которая выглядит примерно так:
surf
Error using surf (line 49)
Not enough input arguments.
Текст включает имя функции, которое выдало ошибку (surf
, в этом случае), и показывает провальный номер строки в программном файле этой функции. Кликните по номеру строки; MATLAB открывает файл и располагает курсор в местоположении в файле где порожденная ошибка. Можно смочь определить причину ошибки путем исследования этой линии и кода, который предшествует ему.
Продвижение через код в отладчик
Можно использовать Отладчик MATLAB, чтобы продвинуться через провальный код. Кликните по подчеркнутому тексту ошибки, чтобы открыть файл в редакторе MATLAB в или около точки ошибки. Затем кликните по дефису в начале той линии, чтобы установить точку останова в том местоположении. Когда вы повторно выполняете свою программу, MATLAB приостанавливает выполнение в точке останова и позволяет вам продвинуться через код программы. Команда dbstop on error
также полезно в нахождении точки ошибки.
См. документацию относительно Отладки Файлы кода MATLAB для получения дополнительной информации.
Получение исключения в коде программы
Когда вы написали свою собственную программу в программном файле, вы можете исключения catch и попытка обработать или разрешить их вместо того, чтобы позволить вашей программе завершать работу. Когда вы отлавливаете исключение, вы прерываете нормальный процесс завершения и вводите блок кода, который справляется с дефектной ситуацией. Этот блок кода называется catch block.
Некоторые вещи, которые вы можете хотеть сделать в блоке выгоды:
-
Исследуйте информацию, которая была получена об ошибке.
-
Соберите дополнительную информацию, чтобы сообщить пользователю.
-
Попытайтесь выполнить задачу под рукой некоторым другим способом.
-
Очистите любые нежелательные побочные эффекты ошибки.
Когда вы достигаете конца блока выгоды, можно или продолжить выполнять программу, если это возможно, или отключать ее.
Используйте MException
возразите, чтобы получить доступ к информации об исключении в вашей программе. Для получения дополнительной информации смотрите, Отвечают на Исключение.
Генерация нового исключения
Когда ваш код программы обнаруживает условие, которое или заставит программу привести к сбою или привести к недопустимым результатам, это должно выдать исключение. Эта процедура
-
Сохраняет информацию о том, что пошло не так, как надо и что код выполнял во время ошибки.
-
Собирает любую другую уместную информацию об ошибке.
-
Дает MATLAB команду выдавать исключение.
Используйте MException
возразите, чтобы получить информацию об ошибке. Для получения дополнительной информации смотрите, Выдают Исключение.
При
обнаружении ошибок в выражениях или
командах MATLAB указывает на наличие
ошибки. Из текста иногда можно понять
сущность ошибки, но часто комментарии
бывают настолько общими, что трудно
установить место и содержание ошибки.
Надо отличать предупреждение
об ошибке от сообщения
о ней. Предупреждения
(обычно после слова Warning)
не останавливают вычисления и лишь
предупреждают о том, что ответ может
быть ошибочным.
Пример
предупреждения:
>>
sin(0)/0
Warning:
Divide
by
zero.
ans =
NaN
При
сообщении
об ошибке красного
цвета
(после
знаков ???) MATLAB не выдает решение. Вычислим,
например, значение с помощью встроенной
элементарной функции sqrt
(квадратный корень), введя выражение
>>
sqr(2)
???
Undefined function or variable ‘sqr’.
Это
сообщение об ошибке говорит о том (на
английском языке), что не определена
функция или переменная и указывает на
sqr.
Устранение
ошибки наиболее целесообразно не путем
набора нового правильного выражения,
а редактированием ошибочного.
Существует несколько
способов возврата в строку ввода ранее
введенных команд.
Первый
способ
– с помощью клавиш <↑>
и <↓>
(см. разд. 1.2).
При
вычислении значения обнаружена
синтаксическая
ошибка:
не определена функция sqr.
Клавишей <↑> вернем команду >>
sqr(2) в командную строку. Отредактируем
ее: после sqr
вставим t
и нажмем клавишу <Enter>:
>> sqrt(2)
ans =
1.4142
Второй
способ
– копирование из окна Command
History.
Для
активизации окна Command
History
необходимо
войти в меню View
командного
окна, выбрать
вкладку с одноименным названием и
щелкнуть на ней левой кнопкой мыши
(поставить галочку). В этом окне
отображаются дата и время каждого сеанса
работы в MATLAB, а также перечень команд,
вводимых в течение каждого сеанса (рис.
1.4).
Если
в окне Command
History
дважды щелкнуть левой кнопкой мыши на
какой — либо команде, эта команда будет
выполнена. Это равнозначно вводу данной
команды в командное окно и последующему
нажатию клавиши <Enter>
(рис. 1.4).
Рис. 1.4
Если
щелкнуть на какой — либо команде окна
Command
History
левой
кнопкой мыши, то данная команда становится
текущей (на синем фоне). Можно выделить
нужную последовательность команд при
помощи комбинации клавиш <Shift>+<↑>,
<Shift>+<↓>.
При щелчке правой кнопкой мыши на
выделенной области окна Command
History
появляется
всплывающее меню. Выбор пункта Copy
приводит к копированию выделенной
последовательности в буфер обмена
Windows.
При щелчке правой кнопкой мыши на области
окна Command
Window
появляется всплывающее меню. Выбор
пункта Paste
приводит к вставке скопированной
последовательности команд в командную
строку. Весь вставленный в командную
строку набор команд отправляется на
выполнение нажатием клавиши <Enter>.
До
нажатия клавиши <Enter>
содержимое набора можно редактировать,
используя обычные приемы редактирования,
общие для Windows
— приложений, в том числе и с помощью
мыши. Можно вносить в команды необходимые
изменения, удалять лишние команды и
добавлять новые. При редактировании
клавиши <↑>
и
<↓>
могут использоваться для перемещения
между строками набора.
Третий
способ
– копирование из содержимого текстового
поля рабочего окна.
В
текстовом поле можно выделить с помощью
мыши любую команду и копировать ее в
буфер обмена операционной системы
Windows,
а затем вставить в командную строку.
Выделение и вставка производится теми
же средствами, что и в других Windows
— приложениях.
При
вычислениях любое арифметическое
выражение набирается с клавиатуры в
командной строке. Редактор MATLAB укажет
на синтаксические ошибки. Но он не
обнаружит так называемые семантические
ошибки,
когда, например, пользователь ошибочно
заменит знаки операций <+> на <–>
или неверной расстановкой скобок изменит
общий порядок выполнения операций и т.
д.
MATLAB
совместно с пакетом ToolBox
Symbolic
Math
(Глава 7) предоставляет возможность
визуального контроля введенного
выражения.
Пусть требуется
вычислить значение выражения
F=
при
x
= 0,1, y
= 0,2.
Введем
значения переменных x
и y.
Наберем с клавиатуры арифметическое
выражение F
и вычислим его значение, нажав клавишу
<Enter>.
Редактор MATLAB синтаксических ошибок
ввода не обнаружил. В результате получим
F
=
7,2111
(рис. 1.5).
В
третьей командной строке редактируется
предыдущая команда (<↑>)
для придания арифметическому выражению
F
статуса символьного с помощью команды
sym
(разд.
7.1). Выведенное в командное окно символьное
выражение F
синтаксически совпадает с арифметическим.
Рис. 1.5
Далее
команда pretty(F)
(см.
разд. 7.1) выводит в командное окно
символьное выражение F
в виде, близком к математической формуле.
Выведенная и исходная формулы не
совпадают. Предполагаемая ошибка ввода
– знаменатель исходной дроби не заключен
в скобки.
В
пятой командной строке редактируется
третья команда (<↑↑>)
для устранения ошибки ввода.
Затем
команда pretty(F)
отображает в командном окне исправленное
выражение. Теперь выведенная формула
совпадает с исходной.
В седьмой командной
строке редактируется пятая команда
(<↑↑>) для придания исправленному
символьному выражению статуса
арифметического. Седьмая команда
вычисляет правильный результат F =— 2,6904.
Иногда появляется
совершенно неожиданный или явно
неправильный результат. Так, если вы
попытаетесь вычислить приx
= -8, набирая
>> x=-8;r=x^(1/3)
r=
1.0000 + 1.7321i
ответ, который система
MATLABсоздает, не похож на
ожидаемый результат-2. Тем не менее,
полученный результат является кубическим
корнем из-8, что подтверждается
возведением этого результата в куб:
>> r^3
ans =
-8.0000 + 0.0000i
Дело в том, что
многозначная функция имеет в комплексной
плоскости три ветви, а уравнение x3
= -8– три разных значения корня:
>> solve(‘x^3=-8’)
ans =
[ -2]
[ 1-i*3^(1/2)]
[ 1+i*3^(1/2)]
Система MATLABвоспринимает для отрицательногоxкак значение
.
Поэтому для получения
ожидаемого результата при вычислении
, x = -8, надо набирать
>> x=-8;r=sign(x)*abs(x)^(1/3)
r=
-2
Это обстоятельство
надо обязательно учитывать, например,
при построении графика функции y
= .
Соседние файлы в папке OKMEC
- #
- #
The MATLAB® Code Analyzer can automatically check your code for coding problems. You
can view warning and error messages about your code, and modify your file based on the
messages. The messages are updated automatically and continuously so you can see if your
changes address the issues noted in the messages. Some messages offer additional
information, automatic code correction, or both.
Enable Continuous Code Checking
To enable continuous code checking, on the Home tab, in the
Environment section, click
Preferences. Select > , and then select the Enable integrated warning
and error messages check box. Set the
Underlining option to Underline warnings and
.
errors
When continuous code checking is enabled, MATLAB displays warning and error messages about your code in the Editor and
Live Editor. For example, the sample file lengthofline.m
contains
several errors and warnings. Copy the code into the Editor and save the file as
lengthofline.m
.
lengthofline.m
Code
View Code Analyzer Status for File
When you open a file in the Editor or Live Editor, the message indicator at the
top of the indicator bar shows the overall Code Analyzer status for the file.
Message Indicator | Description | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Preferences. Select > , and then select the Enable integrated warning and error messages check box. Set the Underlining option to Underline warnings and .
When continuous code checking is enabled, MATLAB displays warning and error messages about your code in the Editor and
View Code Analyzer Status for FileWhen you open a file in the Editor or Live Editor, the message indicator at the
For example, in
View Code Analyzer MessagesTo go to the first code fragment containing a message, click the message For example, in To go to the next code fragment containing a message, click the message indicator. To view the message for a code fragment, move the mouse pointer within the To go to the next code fragment containing a message, click the message indicator. To view the message for a code fragment, move the mouse pointer within the Fix Problems in CodeFor each message in your code file, modify the code to address the problem noted For example, on line 47 in To fix the problem in line 47, change To fix the problem in line 47, change For some messages, MATLAB suggests an automatic fix that you can apply to fix the problem. If an
For some messages, MATLAB suggests an automatic fix that you can apply to fix the problem. If an For example, on line 27 in If you know how to fix the problem, perhaps from prior experience, click the If multiple instances of a problem exist, MATLAB might offer to apply the suggested fix for all instances of the After you modify the code to address all the messages or disable designated
Analyze Files Using the Code Analyzer AppSince R2022b You can create a report of Code Analyzer messages for all files in a folder using To open the app:
If multiple instances of a problem exist, MATLAB might offer to apply the suggested fix for all instances of the After you modify the code to address all the messages or disable designated
Analyze Files Using the Code Analyzer AppSince R2022b You can create a report of Code Analyzer messages for all files in a folder using To open the app:
Identify and Store Issues in Files With
|