When the system-defined default error handler receives a transient error object, it automatically deletes the object before returning. In all other cases, code that signals and handles errors must explicitly delete error objects as needed to prevent them from accumulating.
Since G2 cancels execution of a block that signals an error, the code that deletes an error object cannot follow the signal statement in that block. The most convenient place to delete an error object is in the error handler that receives it. Any other technique will do as well, provided that it can never fail.