An inescapable while loop in Python

fman is programmed in Python. While hunting a bug today, I realised I've been making a mistake for the past 6 years. Consider the following code:

from time import sleep
while True:
    try:
        sleep(.1)
    except:
        pass

What do you think happens when you press Ctrl+C? I would have expected to get out of the infinite loop. But it doesn't work! You have to press Ctrl+Z to suspend the process.

The reason for this is that the empty except: catches everything, including the KeyboardInterrupt that is raised when you press Ctrl+C. Instead, what you'll most likely want is:

try:
    ...
except Exception:
    ...

This catches the exceptions you're normally interested in but leaves others like KeyboardInterrupt or SystemExit unharmed. No more except: for me!

fman is a file manager with a Python API. If you liked this post, you should check it out!