Depends what you mean by "avoid exceptions". You might mean
1. design your APIs so that incorrect arguments are indicated by return codes, not exceptions
2. Not establish any exception handlers (e.g. try/catch, or begin/rescue)
3. take extra care in checking arguments, so as not to cause exceptions in functions called.
Or perhaps you meant something else entirely.
As others above already said, it's costly to raise an exception. But more than that, it can be unclear, and I would avoid unclear code even more than I would avoid costly code.
Exceptions should be used for exceptional (that is, unusual or unacceptable situtations.) So for instance, if one were writing a string search function that returns the 0-based index of the first matching substring, what would you do if the string is not found. You could raise an exception or you could return -1. All things being equal, -1 is better, as failing to find a string within another is non unacceptable or even wrong. On the other hand, if you were writing a validation function, let's say it's something that's supposed to check that the user has entered a valid ice-cream flavour (and in your limited world, there are only three flavours) then it might be right to throw (or raise) an Exception if given an invalid kind of ice-cream. (But then again, suppose you want the application, if given an "invalid" ice-cream, to put up a form to place a special order for the ice-cream. Then you would not want the exception, you'd want the return code.
As for not establishing any handlers, one thing I can tell you is I have seen a lot of code that has empty (omnivorous) error handlers that just silently ignore the exception and keep going. I don't know whether .NET people do that any more than on other platforms, but it drives me nuts, as it makes debugging quite difficult.)