Unetway

Erlang - Exceptions

Обработка исключений требуется на любом языке программирования для обработки ошибок времени выполнения, чтобы можно было поддерживать нормальный поток приложения. Исключение обычно нарушает нормальный поток приложения, поэтому мы должны использовать обработку исключений в нашем приложении.

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 Попытка связаться с несуществующим процессом.