2012-10-23

A public service announcement for Python coders:

Python lets you catch SomeException and assign it to a variable e like so:

try: ... except SomeException, e: ...

Regrettably, it will behave similarly if you do this:

try: ... except SomeException, SomeOtherException: ...

And then very bad things(tm) will happen when you try to dereference SomeOtherException later, since, much to your surprise, it will refer to an instance of SomeException rather than the original class named SomeOtherException .

So don’t use that syntax. Instead, write your except clauses like one of the following:

except SomeException: except SomeException as e: except (SomeException, SomeOtherException): except (SomeException, SomeOtherException) as e:

Python 3 will force you to remember, but as long as you’re using Python 2 it’s your burden to bear.