Exception hierarchy changes
===========================
Summary
-------
`TimeShiftError` no longer inherits directly from `FTPError` but
instead via `InternalError`.
`ParserError` used to inherit from `FTPOSError`. This base class
isn't one anymore. Instead, `ParserError` inherits from
`InternalError` (which inherits directly from `FTPError`).
The two changes above may break client code.
TimeShiftError
--------------
In the case of `TimeShiftError`, if you check both `InternalError`
and `TimeShiftError` you must check the more specialized first:
try:
...
except TimeShiftError:
...
except InternalError:
...
ParserError
-----------
Regarding `ParserError`, if you have previously checked for
`FTPOSError` (in your thoughts including `ParserError`), use now
try:
...
except (FTPOSError, ParserError):
...
The parenthesis are important!
If you checked for `InternalError` and don't want to handle
`ParserError` in the `except` clause for `InternalError`, use
try:
...
except ParserError:
...
except InternalError:
...