Errors

General Behavior

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 Error Exception Classes.

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.

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 FFmpegError exception;

  2. We want to use the builtin exceptions whenever possible.

As such, PyAV effectively shadows as much of the builtin exception hierarchy as it requires, extending from both the builtins and from FFmpegError.

Therefore, an argument error within FFmpeg will raise a av.error.ValueError, which can be caught via either 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 FFmpegError.log.

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

try:
    do_something()
except av.FilterNotFoundError:
    handle_error()
class av.FFmpegError(code, message, filename=None, log=None)

Bases: Exception

Exception class for errors from within FFmpeg.

errno

FFmpeg’s integer error code.

strerror

FFmpeg’s error message.

filename

The filename that was being operated on (if available).

log

The tuple from av.logging.get_last_log(), or None.