Earlier quoted context omitted.
For robust code you should also use set -e. This changes things again. Often a process started by the shell will get the signal, too (depends of course on how it is sent) and exit with a non-zero return value (depends on the process of course). I believe (not at the computer right now) the handler for EXIT is called in that case. Was it so that bash can also trap ERR, but dash cannot? It's not perfectly easy to handl…
> For robust code you should also use set -e. Highly debatable.
Of course in special cases where you do explicit error handling you can disable it. But for the big mass of commands where nobody checks whether it worked.