Errors¶
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 Error Exception Classes and at a lower level via Error Type Enumerations.
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 av.error.ErrorType
as an enumeration of the various FFmpeg errors.
To mimick the stdlib errno
module, all enumeration values are available 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()
- class av.error.ErrorType¶
Bases:
av.enum.EnumItem
An enumeration of FFmpeg’s error types.
- tag¶
The FFmpeg byte tag for the error.
- strerror¶
The error message that would be returned.
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:
We want every exception that originates within FFmpeg to inherit from a common
FFmpegError
exception;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 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).
- type¶
The
av.error.ErrorType
enum value for the error type.
- log¶
The tuple from
av.logging.get_last_log()
, orNone
.
Mapping Codes and Classes¶
Here is how the classes line up with the error codes/enumerations:
Exception Class |
Code/Enum Name |
FFmpeg Error Message |
---|---|---|
|
|
Bitstream filter not found |
|
|
Internal bug, should not have happened |
|
|
Buffer too small |
|
|
Decoder not found |
|
|
Demuxer not found |
|
|
Encoder not found |
|
|
End of file |
|
|
Immediate exit requested |
|
|
Generic error in an external library |
|
|
Filter not found |
|
|
Invalid data found when processing input |
|
|
Muxer not found |
|
|
Option not found |
|
|
Not yet implemented in FFmpeg, patches welcome |
|
|
Protocol not found |
|
|
Unknown error occurred |
|
|
Experimental feature |
|
|
Input changed |
|
|
Output changed |
|
|
Server returned 400 Bad Request |
|
|
Server returned 401 Unauthorized (authorization failed) |
|
|
Server returned 403 Forbidden (access denied) |
|
|
Server returned 404 Not Found |
|
|
Server returned 4XX Client Error, but not one of 40{0,1,3,4} |
|
|
Server returned 5XX Server Error reply |