I've recently become the 'python expert' in a small company that had a bunch of people who were writing python code, but didn't really have anyone that had studied python. Our code had a lot of cases of this:
try:
<probably not foolish thing>
except:
<deal with exceptions>
I've been dutifully correcting it to, and teaching the others to correct it to, this:
try:
<probably not foolish thing>
except Exception as err:
<deal with err>
But today I was code reviewing a change where a colleague had applied an automated linter, and one of those instances had been replaced by
try:
<probably not foolish thing>
except BaseException as err:
<deal with err>
I had a feeling this was wrong. But I didn't want to just go with a feeling on it and tried to google what circumstances I should use which in. I failed, so I asked twitter.
Essentially, Exception is a subclass of BaseException. So are several things that you probably really do want to kill your program (the one most noted in the twitter replies was ctrl + c / keyboard interrupt). So, except BaseException does what a bare except did, which is why the linter suggested it. But except Exception is almost certainly what you meant.
From the python docs