As per SYNR-1113, there are two areas in the Python client where exception handling could be better:
(1) Exception chaining: When raising a caught exception, be sure to do so with the 'except' block that caught it to utilize Python's exception chaining. See https://stackoverflow.com/questions/16414744/python-exception-chaining
(2) When retrying on exception, do so selectively. In _downloadFileHandle() there is a try/except which retries download on every exception thrown. In there was an exception which was not retryable. Retrying caused another problem to occur which masked the root cause. It would be helpful not to retry 'permanent failures' but rather to simply raise such exceptions.