[Tutor] try..except - what about that ton of **Error statements?
Steven D'Aprano
steve at pearwood.info
Wed May 22 14:50:33 CEST 2013
On 22/05/13 15:46, Jim Mooney wrote:
> I'm looking at Try..Except
>
> Try:
> <some statements>
> Except SomethingError as err:
> <other statements>
>
> The list of error statements is huge. How do I know which error
> statement to put in place of SomethingError (or multiple errors for
> that matter)? Or is it best to just leave SomethingError blank until I
> know more?
For playing around at the interactive interpreter, leaving the except clause blank is fine.
try:
something()
except:
pass
But don't do this in real code! In real code, the rules you should apply are:
1) never hide programming errors by catching exceptions;
2) errors should only be caught if you can recover from them;
3) your job as a programmer is *not* to stop your program from raising an error, but to make it behave correctly -- sometimes an error is the right thing to do;
4) catch the fewest possible errors that make sense;
5) nearly always, "the fewest" will mean *zero* -- 99% of your code should not be inside a try...except block;
6) you should put the least amount of code as possible inside each try block -- as a general rule, that doesn't just mean "one line of code", but *one operation*.
Unfortunately there is no hard rule about what exceptions Python will raise. Some things are obvious: if you mistype a name, you'll probably get a NameError. Some things are documented: if you look up an item in a dict, and it is not there, you will get KeyError. Some things are not. E.g. there's pretty much no limit to the exceptions you *might* (but probably never will!) get from some of the more complex modules.
In general, once I have decided that I need a try...except block around a certain operation, I look up what exceptions it is documented to produce (if any!). Then I decide, if such-and-such an exception occurs, can I recover from it? If not, I don't catch it. If so, then I do. Then, I wait to see if the operation produces some other undocumented exception. If so, then I repeat the process.
--
Steven
More information about the Tutor
mailing list