Handling errors in potentially incomplete responses
Some suggestions:

Don't use exceptions for flow control unless you have to for TOCTOU or other reasons. &quot;Tell, don't ask&quot; is a useful guideline when requesting something from a piece of state the current code has no control over, but it's not a law. In your code there is no chance of res.country.names changing while running res.country.names.get('en', &quot;-1&quot;), and that is much clearer than using exception handling to set a default.
You almost always want to catch specific exceptions.
When retrieving values from a dict you can use my_dict.get(&quot;key&quot;, default) to get a default value if the key does not exist.
Use f-strings rather than + to create formatted strings.