Factored into the mix is the question of performance. Raising exceptions can be an expensive proposition, such that exceptions might ought to be raised only in exceptional circumstances - i.e. those errors which are not part of the normal flow or behavior of the program.
One other factor in the DbC mode of operation is that a lot of people seemed to have disabled the assertions in the production compilation - for reasons of speed. Using an assertion scheme to raise exceptions is fine as long as you don't just use the contracts during the testing phase.