Good question Sander. It could be Inactive code taking the place whenever the execution tries code which matches the Don't pattern.
There could be an expression evaluated, like Check which returns something when a message is generated, but evaluate it in place inside the expression. Another analogy is with the optional second argument to Dynamic. which evaluates when a variable changes its value.
In order to give a concrete answer,
Dont[Table[2/i, {i,-2,2}], DivideByZero]
might return
{-1 -1/2, Inactive[Divide][2,0], 1/2, 1}