Лучшие практики для идентификаторов сообщений MATLAB?

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

Идентификатор сообщения находится в формате:

component:mnemonic

Например, собственный идентификатор сообщения неопределенной переменной MATLAB:

MATLAB:dispatcher:nameConflict

Таким образом, когда Вы используете исключения в своем собственном коде, что Вы используете для идентификатора сообщения? Действительно ли Вы снова используете MATLAB по умолчанию? Составить свое собственное? Что Вы используете для и мнемонических строк компонента?

14
задан Amro 3 July 2013 в 16:58
поделиться

2 ответа

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

(className):(parentFunction):functionWhereErrorOccurs:descriptiveMnemonic

Компоненты:

  • className : имя класса, если функция, в которой возникает ошибка, является методом /конструктор.

  • parentFunction : если функция, в которой возникает ошибка, является подфункцией в m-файле или вложенной функцией , это будет первичная m- файловая функция или родитель вложенной функции соответственно. Таким образом, у вас может быть несколько компонентов parentFunction .

  • functionWhereErrorOccurs : Название этого компонента говорит само за себя. ;)

  • descriptiveMnemonic : Я подчеркиваю описательный . Например, inputError на самом деле мне ничего не говорит, но notEnoughInputs дает понять, что я не передал достаточно аргументов. Я всегда использую нижний регистр верблюда для мнемоники, где первая буква слова заглавная, за исключением самого первого слова.

Компоненты className и parentFunction могут считаться несколько избыточными, поскольку свойство stack в MException class уже определяет полный путь к родительскому m-файлу и номер строки с ошибкой. Однако одна из целей идентификатора сообщения состоит в том, что он позволяет вам однозначно идентифицировать ошибку для целей, отличных от простого поиска источника ошибки.

Допустим, у вас есть функция myFcn и класс myClass , который перегружает myFcn . Если вы сделаете идентификатор сообщения об ошибке для первого сообщения myFcn: maxIterationsReached , а идентификатор сообщения об ошибке для второго будет myClass: myFcn: maxIterationsReached , это позволит вам, для Например, установите точку останова с помощью DBSTOP , которая останавливает выполнение только тогда, когда эта ошибка создается myClass \ myFcn , а не myFcn . Аналогичным образом, уникальные идентификаторы сообщений warning полезны тем, что вы можете специально выбрать игнорировать предупреждения из конкретных функций, позволяя отображать другие.

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

12
ответ дан 1 December 2019 в 14:10
поделиться

В своей работе я использую YMA:(mainFunctionName):(descriptiveMnemonic), где YMA - это просто мои инициалы. Например, все предупреждения и ошибки, вызываемые моей утилитой UIInspect, имеют идентификаторы, подобные YMA:uiinspect:XXX.

3
ответ дан 1 December 2019 в 14:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: