While I cannot vouch for your experience with the third-party library that you spoke about, I would say that at least documentation of exceptions is expected. Take the built-in smtplib for example. The exceptions that may be thrown are explained, and the methods include information about which ones will throw and why.
As far as we know in advance, what exceptions could be thrown, regardless of whether you take them into account, etc. - You can find code introspection in the IDE that will give you what you need.
In my experience, exceptions are what you know in advance, because you have unmanaged configuration conditions (working with user input, etc.), or you work using methods that encapsulate behavior in such a way that their rules . For example, in Python, if you are working with an object that should have this attribute, but you are not sure that you can guarantee that it will have this attribute, instead of making an call to Object.method() , you do it instead :
# getattr uses the arguments (object, 'attribute', default) toCall = getattr(MyInstance, 'methodName', None) if toCall is not None: toCall(args)
When working with sets, such as dictionaries, this is even easier:
nums = dict((i, i) for i in range(30))
So, in general, when you discuss python programming, the idea is not that you need to make sure that all exceptions are taken into account. On the contrary. Consider the ones you should, but try using idioms that minimize the number of them you have to deal with.