`if key in dict` vs. `try/except` - which is more readable idiom?
code-readability, defaultdict, idioms, python, readability
Solution
Exceptions are not conditionals.
The conditional version is clearer. That's natural: this is straightforward flow control, which is what conditionals are designed for, not exceptions.
The exception version is primarily used as an optimization when doing these lookups in a loop: for some algorithms it allows eliminating tests from inner loops. It doesn't have that benefit here. It has the small advantage that it avoids having to say `"blah"` twice, but if you're doing a lot of these you should probably have a helper `move_key` function anyway.
In general, I'd strongly recommend sticking with the conditional version by default unless you have a specific reason not to. Conditionals are the obvious way to do this, which is usually a strong recommendation to prefer one solution over another.
Problem
I have a question about idioms and readability, and there seems to be a clash of Python philosophies for this particular case: I want to build dictionary A from dictionary B. If a specific key does not exist in B, then do nothing and continue on. Which way is better? ``` try: A["blah"] = B["blah"] except KeyError: pass ``` or ``` if "blah" in B: A["blah"] = B["blah"] ``` "Do and ask for forgiveness" vs. "simplicity and explicitness". Which is better and why?