استثناها توسط سیستم زمانی که مشکلی داخلی پیش میآید ایجاد و ارسال میشوند. البته شما میتوانید مستقیما استثنا بسازید و آن را بقرستید. برای این کار در زبان ارلنگ راه های مختلفی وجود دارد شما می توانید تابع(throw(Exception را فراخوانی کنید همچنین میتوانید با فرخواهنی تابع(exit(Exception نیز این کار را انجام دهید. راه دیگری نیز برای این منظور وجود دارد و آن فراخوانی(erlang:error(Exception میباشد. کد زیر تمام این موارد را در یک تابع نشان میدهد:
generate_exception(1) -> a;
generate_exception(2) -> throw(a);
generate_exception(3) -> exit(a);
generate_exception(4) -> {'EXIT', a};
generate_exception(5) -> erlang:error(a).
برای گرفتن استثنا ها نیز در ارلنگ نیز میتوانید از یکی از دو روش زیر استفاده کنید.
در راه اول شما تابعی که امکان ارسال استثناء دارد را درون عبارت کنترل try به قسم زیر قرار میدهید:
catcher(N) ->
try generate_exception(N) of
Val -> {N, normal, Val}
catch
throw:X -> {N, caught, thrown, X};
exit:X -> {N, caught, exited, X};
error:X -> {N, caught, error, X}
end.
در راه دوم شما از تابع مورد نظر درون catch قرار میدهید.
catcher(N) -> catch generate_exception(N).
به خاطر داشته باشید که زمانی که شما استثناء را دریافت میکنید نتیجه تبدیل به فرمت توپل میشود.