Иллюстрированный самоучитель по Mathematica 3/4

Средства диагностики и сообщения об ошибках

Средства диагностики органично входят во все программные модули системы Mathematica, созданные профессионально. Благодаря этому система обнаруживает неточные действия пользователя, например синтаксические ошибки при вводе идентификаторов функций и команд, неправильное использование типов данных, применение недопустимых операций (вроде злосчастного деления на ноль) и т. д. Всякий раз, когда ошибочное действие обнаружено, система выдает сообщение об ошибке в следующем виде:

Тип::Метка%Диагностика:Сообщение

Эти сообщения появляются в отдельных неактивных ячейках. Тип указывает на тип ошибки, например, General – ошибка общего вида, Syntax – синтаксическая ошибка, Arg – ошибка задания аргумента и т. д. Метка указывает место ошибки в списке ошибок данного типа, а Диагностика указывает (увы, не всегда…) на ошибочное выражение. Сообщение обычно раскрывает суть ошибки.

Допустим, мы пытаемся вычислить значение экспоненциальной функции, указав ошибочно аргумент 2.3 с разделительной запятой вместо точки. Вот как Mathematica отреагирует на такую попытку (рис. 3.6, первый пример).

Иллюстрированный самоучитель по Mathematica 3/4 › Типы данных › Средства диагностики и сообщения об ошибках
Рис. 3.6. Примеры выполнения "ошибочных" операций

Итак, ясно, что произошла ошибка задания аргумента – функция Ехр должна иметь только один аргумент, а число 2.2 система воспринимает как два аргумента, разделенные запятой. Вот еще один пример – вроде бы ошибочно заданы круглые скобки в выражении N (Ехр (2)). Mathematica 3 в этом случае дала бы два предупреждающих сообщения:

Syntax::bktwrn: "Exp(2)" should probably be "Exp[2]".
Syntax::bktwrn: "N(Exp(2))" should probably be "N[Exp(2)]".
2ExpN

Однако Mathematica 4 в подобных случаях дает допустимую для данной системы форму представления введенного выражения. Тем не менее, надо отметить, что сообщения об ошибках системы Mathematica дают не только указания о самом по себе факте наличия ошибки, но и сообщают о том, что надо сделать для ее исправления.

Как видно из сведений о подготовке пакетов расширения, сообщения об ошибках и иные сообщения (в том числе информационные) заданы в их структуре. Насколько эти сообщения точны и как они предугадывают возможные ошибки – это уже зависит от опыта программиста, готовящего программные модули.

Включение и выключение сообщений об ошибках

Опытный пользователь нередко способен опознать ошибки и без слишком назойливых сообщений о них. Например, он может судить о своей промашке просто по отказу системы выполнить вычисление и по повтору выражения в строке вывода (см. примеры выше). Кроме того, часть сообщений носит предупреждающий характер и на первых порах может игнорироваться.

Для отключения сообщений об ошибках служит ключ:

Off[Function::tag]

Например, отключим сообщение об ошибках у функции Ехр:

Off[Exp::argx]
Exp[2.2]
Exp[2.2]
Exp[2]
E2
N[Exp[2]]
7.38906

Для включения сообщения об ошибках используется ключ:

On[Function::tag]

Например, для возобновления выдачи ошибок у функции Ехр надо исполнить команду:

On[Exp::argx]

К сожалению, диагностика ошибок не способна опознать ошибки, имеющие формально правильный синтаксис. Чаще всего эти ошибки связаны с неверным описанием алгоритма вычислений. Например, если пользователь в математическом выражении вместо Sin [х] записал Cos [х], то эта грубая ошибка никак не будет распознана системой, поскольку синтаксически вызов функции Cos [х] записан безупречно. Часто пользователи путают идентификаторы переменных. Естественно, что ответственность за такие ситуации целиком лежит на пользователе – программисте.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.