Skip to content

Latest commit

 

History

History
85 lines (53 loc) · 2.36 KB

File metadata and controls

85 lines (53 loc) · 2.36 KB

Errors

.. currentmodule:: av.error

General Behaviour

When PyAV encounters an FFmpeg error, it raises an appropriate exception.

FFmpeg has a couple dozen of its own error types which we represent via :ref:`error_classes` and at a lower level via :ref:`error_types`.

FFmpeg will also return more typical errors such as ENOENT or EAGAIN, which we do our best to translate to extensions of the builtin exceptions as defined by PEP 3151 (and fall back onto OSError if using Python < 3.3).

Error Type Enumerations

We provide :class:`av.error.ErrorType` as an enumeration of the various FFmpeg errors. To mimick the stdlib errno module, all enumeration values are availible in the av.error module, e.g.:

try:
    do_something()
except OSError as e:
    if e.errno != av.error.FILTER_NOT_FOUND:
        raise
    handle_error()
.. autoclass:: av.error.ErrorType


Error Exception Classes

PyAV raises the typical builtin exceptions within its own codebase, but things get a little more complex when it comes to translating FFmpeg errors.

There are two competing ideas that have influenced the final design:

  1. We want every exception that originates within FFmpeg to inherit from a common :class:`.FFmpegError` exception;
  2. We want to use the builtin exceptions whenever possible.

As such, PyAV effectivly shadows as much of the builtin exception heirarchy as it requires, extending from both the builtins and from :class:`FFmpegError`.

Therefore, an argument error within FFmpeg will raise a av.error.ValueError, which can be caught via either :class:`FFmpegError` or ValueError. All of these exceptions expose the typical errno and strerror attributes (even ValueError which doesn't typically), as well as some PyAV extensions such as :attr:`FFmpegError.log`.

All of these exceptions are availible on the top-level av package, e.g.:

try:
    do_something()
except av.FilterNotFoundError:
    handle_error()
.. autoclass:: av.FFmpegError


Mapping Codes and Classes

Here is how the classes line up with the error codes/enumerations: