# Error handling

When an error or an unexpected event occurs during a Hawkey routine, an exception is raised:

- if it is a general error that could be common to other Python programs, one of the standard Python built-in exceptions is raised. For instance, `IOError` and `TypeError` can be raised from Hawkey.

- programming errors within Hawkey that cause unexpected or invalid states raise the standard `AssertionError`. These should be reported as bugs against Hawkey.

- programming errors due to incorrect use of the library usually produce `hawkey.ValueException` or one of its subclasses, `QueryException` (poorly formed Query) or `ArchException` (unrecognized architecture).

- sometimes there is a close call between blaming the error on an input parameter or on something else, beyond the programmer’s control. `hawkey.RuntimeException` is generally used in this case.

- `hawkey.ValidationException` is raised when a function call performs a preliminary check before proceeding with the main operation and this check fails.

The class hierarchy for Hawkey exceptions is:

    +-- hawkey.Exception
         +-- hawkey.ValueException
         |    +-- hawkey.QueryException
         |    +-- hawkey.ArchException
         +-- hawkey.RuntimeException
         +-- hawkey.ValidationException