Why do all the dynamic languages catch name errors by default?
For all my experience with the try-catch paradigm in dynamic languages, I've *never* seen a situation where I wanted a *name error* in the try block to be caught. It's hard to imagine one. A name error is a typo 99% of the time, and a mistake 99% of the remainder. Catching it accidentally can lead to an especially frustrating debugging experience.
So why do *all* the dynamic languages have `catch` statements catch name errors by default?
And their designers obviously realized that there are some exceptions you don't usually want to catch, as they have a class you can catch that excludes other things in that category (like `KeyboardInterrupt`s): `StandardError` in Ruby, `Exception` in Python (with `BaseException` being the real base class). But for some reason both of them consider `NameError` a subclass of this!
Why do they do all this? And are there dynamic languages that don't?
subscribe via RSS