Средства диагностики и сообщения об ошибках
Средства диагностики органично входят во все программные модули системы Mathematica, созданные профессионально. Благодаря этому система обнаруживает неточные действия пользователя, например синтаксические ошибки при вводе идентификаторов функций и команд, неправильное использование типов данных, применение недопустимых операций (вроде злосчастного деления на ноль) и т. д. Всякий раз, когда ошибочное действие обнаружено, система выдает сообщение об ошибке в следующем виде:
Тип::Метка
%
Диагностика:Сообщение
Эти сообщения появляются в отдельных неактивных ячейках. Тип указывает на тип ошибки, например, General – ошибка общего вида, Syntax – синтаксическая ошибка, Arg – ошибка задания аргумента и т. д. Метка указывает место ошибки в списке ошибок данного типа, а Диагностика указывает (увы, не всегда…) на ошибочное выражение. Сообщение обычно раскрывает суть ошибки.
Допустим, мы пытаемся вычислить значение экспоненциальной функции, указав ошибочно аргумент 2.3 с разделительной запятой вместо точки. Вот как Mathematica отреагирует на такую попытку (рис. 3.6, первый пример).
Рис. 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 [х] записан безупречно. Часто пользователи путают идентификаторы переменных. Естественно, что ответственность за такие ситуации целиком лежит на пользователе – программисте.