Source code for fastf1.exceptions



# Exceptions Structure and Handling in FastF1
#
# FastF1 code can be categorized into two parts with regard to exception
# handling:
# - Interface code that is tightly coupled with the user-facing API. These
#   parts of the code usually have a short runtime and perform actions that
#   are very limited in scope. E.g., selecting a specific subset of data.
# - Data processing code that is very self-contained with limited user
#   interaction. While this code is triggered from the user-facing API, it
#   then performs a large range of data loading and processing operations
#   before returning to the user. When errors are encountered during this,
#   they should be handled as gracefully as possible. The user is only warned
#   about the problem and degraded data may be returned. This is preferred
#   over returning no data at all. Catch-all exception handling is used to
#   ensure that all unexpected errors are handled in some way. The errors are
#   transformed into warnings instead.
#
# In some special cases, errors during data processing may be unrecoverable,
# or we don't want to recover them. For example, when API rate limits are
# exceeded. Therefore, the FastF1CriticalException subclass exists as a base
# class for all exceptions that are generated by FastF1 and that need to break
# through the catch-all error handling.


# ### Default FastF1 Exceptions ###

[docs] class DataNotLoadedError(Exception): """Raised if an attempt is made to access data that has not been loaded yet.""" pass
[docs] class ErgastError(Exception): """Base class for Ergast API errors.""" pass
[docs] class ErgastJsonError(ErgastError): """The response returned by the server could not be parsed.""" pass
[docs] class ErgastInvalidRequestError(ErgastError): """The server rejected the request because it was invalid.""" pass
[docs] class InvalidSessionError(Exception): """Raised if no session for the specified event name, type, and year can be found.""" def __init__(self, *args): super().__init__("No matching session can be found.")
[docs] class NoLapDataError(Exception): """ Raised if the API request does not fail, but there is no usable data after processing the result. """ def __init__(self, *args): super().__init__("Failed to load session because the API did not " "provide any usable data.")
# ### Critical FastF1 Exceptions ###
[docs] class FastF1CriticalError(RuntimeError): """Base class for unrecoverable exceptions that occur during internal data processing. These exceptions are always raised to the user and data processing is terminated. """ # Exceptions deriving from this base class must only be used in data # processing code. They must never be handled by FastF1. pass
[docs] class RateLimitExceededError(FastF1CriticalError): """Raised if a hard rate limit is exceeded for any API.""" pass