The code in this repo is just example code which compliments this blogpost (read it for more details!). The tests are just meant to be example references (a lot of them fail on purpose) for the table in this README.
Trigger | Handler | Compatible? | Code |
---|---|---|---|
raise |
rescue |
✅ | Link |
raise |
catch/1 |
❌ | Link |
raise |
catch/2 |
✅ | Link |
throw |
rescue |
❌ | Link |
throw |
catch/1 |
✅ | Link |
throw |
catch/2 |
✅ | Link |
exit |
rescue |
❌ | Link |
exit |
catch/1 |
❌ | Link |
exit |
catch/2 |
✅ | Link |
:erlang.error |
rescue |
✅ | Link |
:erlang.error |
catch/1 |
❌ | Link |
:erlang.error |
catch/2 |
✅ | Link |
Here is the same table re-arranged by the Handler
column, where you can see that catch/2
handles all cases:
Trigger | Handler | Compatible? | Code |
---|---|---|---|
raise |
catch/2 |
✅ | Link |
throw |
catch/2 |
✅ | Link |
exit |
catch/2 |
✅ | Link |
:erlang.error |
catch/2 |
✅ | Link |
raise |
rescue |
✅ | Link |
throw |
rescue |
❌ | Link |
exit |
rescue |
❌ | Link |
:erlang.error |
rescue |
✅ | Link |
raise |
catch/1 |
❌ | Link |
throw |
catch/1 |
✅ | Link |
exit |
catch/1 |
❌ | Link |
:erlang.error |
catch/1 |
❌ | Link |
TLDR: catch/2
will handle any kind of error.