As a new user of contracts, it's unclear to me by reading documentation and tutorials whether a contract is violated by raising an exception. Though it's relatively easy to figure out by trial and error, I'd appreciate a mention of this in your documentation.