Hmm, I wrote a response to this last night, but it seems to have disappeared into the ether.

The reason I did that is so that it is very clear to the end user that the error occured within the value handlers and NOT within the evaluation of the code.

These are very different cases, with different solutions, but without the tryCatch an error in output_handler$value(val) would appear in the output list in exactly the same form that an error in the evaluation would.

It seems worth it to me to me to have the more informative error message, especially since debug/trace/options(error=recover) aren't going to help within all the withCallHandlers calls anyway.