Hmmmm, I see what you want.
But in my opinion, a specific error for a specific action is nessary.
Example:
In a method named get_sestatus():
(1), execute cmd
(2), look for status by the output of cmd.

If we have a case expects the cmd fail. So we write code like this:
*try:*
    *status = get_status()*
*expect SeCmdError:*
     *pass*

But if we raise the same error, such as error.TestError, errors
in step 2 will also makes the test pass. That is what we don't want.

So I prefer to define some specific error types to make our code more precise.

Do you agree ??