>I am happy to put this return default in - just not sure why we would ever request a get for a name which is not in the dictionary keys.

We wouldn't, in general. But there're some parts of the code that want to read arbitrary tags without having to worry about catching exceptions if they don't exist. (Checking that it's None, or providing a custom default, is simpler).

>So I would want to keep the try anyway. Is there a significant performance hit with try statements? If not, why is this a concern?

There's no significant performance hit, but the concern is that try statements don't really tell you where the exceptions are coming from or why they're happening, unless you leave generous comments. They're also mostly for catching issues that normally shouldn't happen, but in this case the exception is predictable and easily avoidable. So, it's just a matter of style.