Do not catch everything

suggest change

While it’s often tempting to catch every Exception:

try:
    very_difficult_function()
except Exception:
    # log / try to reconnect / exit gratiously
finally:
    print "The END"
    # it runs no matter what execute.

Or even everything (that includes BaseException and all its children including Exception):

try:
    even_more_difficult_function()
except:
    pass  # do whatever needed

In most cases it’s bad practice. It might catch more than intended, such as SystemExit, KeyboardInterrupt and MemoryError - each of which should generally be handled differently than usual system or logic errors. It also means there’s no clear understanding for what the internal code may do wrong and how to recover properly from that condition. If you’re catching every error, you wont know what error occurred or how to fix it.

This is more commonly referred to as ‘bug masking’ and should be avoided. Let your program crash instead of silently failing or even worse, failing at deeper level of execution. (Imagine it’s a transactional system)

Usually these constructs are used at the very outer level of the program, and will log the details of the error so that the bug can be fixed, or the error can be handled more specifically.

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:


Exceptions:
* Do not catch everything
* Else

Table Of Contents
2 Filter
3 List
7 Loops
22 Reduce
27 Classes
31 Set
42 Tuple
45 Enum
62 Sockets
70 Exceptions
89 urllib
92 Idioms
104 Stack
105 Profiling
109 Logging
111 os module
118 Mixins
120 ArcPy
126 Arrays
132 2to3 tool
135 Unicode
138 Neo4j
140 Curses
141 Templates
145 heapq
146 tkinter
154 Audio
155 pyglet
157 ijson
160 Flask
161 Groupby
163 pygame
165 hashlib
166 Gzip
167 ctypes
185 pyaudio
186 shelve