Обработка исключений требуется на любом языке программирования для обработки ошибок времени выполнения, чтобы можно было поддерживать нормальный поток приложения. Исключение обычно нарушает нормальный поток приложения, поэтому мы должны использовать обработку исключений в нашем приложении.
Error
Вызов erlang:error(Reason) завершит выполнение в текущем процессе и включает в себя трассировку стека из последних функций, вызванных их аргументами, когда вы ее поймаете. Это те исключения, которые вызывают ошибки времени выполнения выше.
Exists
Есть два вида выходов: «внутренние» выходы и «внешние» выходы. Внутренние выходы запускаются вызовом функции exit / 1 и приостанавливают выполнение текущего процесса. Внешние выходы вызываются с выходом / 2 и связаны с несколькими процессами в параллельном аспекте Erlang.
Throw
Это класс исключения, используемый для случаев, которые можно ожидать от программиста. По сравнению с выходами и ошибками, они действительно не имеют никакого «сбоя в этом процессе»! за ними, но они контролируют поток. Когда вы используете броски, ожидая, что программист их обработает, обычно рекомендуется документировать их использование в модуле, используя их.
Try ... Catch способ оценить выражение, позволяя вам обрабатывать успешный случай, а также ошибки , возникающие.
Общий синтаксис выражения try catch выглядит следующим образом.
try Expression of
SuccessfulPattern1 [Guards] ->
Expression1;
SuccessfulPattern2 [Guards] ->
Expression2
catch
TypeOfError:ExceptionPattern1 ->
Expression3;
TypeOfError:ExceptionPattern2 ->
Expression4
end
Выражение между try и of считается защищенным. Это означает, что любое исключение, происходящее в этом вызове, будет поймано. Узоры и выражения в между попытаться ... и поймать из себя точно так же, как и в случае ... из .
Наконец, часть catch - здесь вы можете заменить TypeOfError на ошибку, throw или exit, для каждого соответствующего типа, который мы видели в этой главе. Если тип не указан, предполагается бросок.
Ниже приводятся некоторые ошибки и причины ошибок в Erlang:
badarg | Плохой аргумент. Аргумент неправильного типа данных или иначе плохо сформирован. |
badarith | Плохой аргумент в арифметическом выражении. |
{badmatch,V} | Ошибка оценки совпадения. Значение V не соответствует. |
function_clause | При вычислении вызова функции не найдено соответствующего предложения функции. |
{case_clause,V} | При оценке выражения case не найдено соответствующего ответвления. Значение V не соответствует. |
if_clause | При оценке выражения if не найдено истинной ветви. |
{try_clause,V} | При оценке части выражения try не встречается соответствующая ветвь. Значение V не соответствует. |
undef | Функция не может быть найдена при оценке вызова функции. |
{badfun,F} | Что-то не так с весельем F |
{badarity,F} | Веселье применяется к неправильному числу аргументов. F описывает забаву и аргументы. |
timeout_value | Значение тайм-аута в выражении receive..after оценивается как нечто большее, чем целое или бесконечное. |
noproc | Попытка связаться с несуществующим процессом. |
0 комментариев