Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Exception handling and "trap" vs. TRAPNAL()



On Oct 3,  7:59pm, DervishD wrote:
:
: I want to replace this code:
: 
:     command1 && {# handle here some possible error probably exiting}
:     command2 && {# handle here exactly the same error as before}
:     ...
:     commandn && {# incredible, here we must handle a similar error}
: 
:     with this one:
: 
:     trap 'throw commonerror$LINENO' ZERR
:     {
:         command1
:         command2
:         command3
:     } always {
:         # Here we catch and handle the common error
:         #   In the exception name we have the line number,
:         # just in case we want to fine tune error handling
:     }

First of all, note that unless command3 is return, the always block
is going to execute regardless of whether there has been an error.

How about:

    function common_error() {
	# Here we catch and handle the common error
	# In the ERROR_LINE variable we have the line number,
	# and in the ERROR variable we have the $? status,
	# just in case we want to fine tune error handling
    }

    trap 'ERROR=$?; ERROR_LINE=$LINENO; return $ERROR' ZERR
    trap common_error EXIT

    command1
    command2
    command3

    trap - EXIT ZERR

Note also for reference that
    trap 'return $?' ZERR
is roughly equivalent to
    setopt ERR_RETURN



Messages sorted by: Reverse Date, Date, Thread, Author