Hierarchy of Anvil-standard exceptions?

If I have to invent one, then I would likely follow this:

In which case, I should define my own app-specific branch of the exception hierarchy. Rooted at (for example) class AppError(anvil.server.AnvilWrappedError).

Could I then use AppError as a base class for the branch? Or must I derive each of my exceptions directly from anvil.server.AnvilWrappedError?

If I can use AppError as a base class, then are there any special considerations I would have to take into account in building, using, and/or catching the derived classes?