Error Handling#
There are several specific Exception
classes to allow user
code to react to specific scenarios related to CAN busses:
Exception (Python standard library)
+-- ...
+-- CanError (python-can)
+-- CanInterfaceNotImplementedError
+-- CanInitializationError
+-- CanOperationError
+-- CanTimeoutError
Keep in mind that some functions and methods may raise different exceptions.
For example, validating typical arguments and parameters might result in a
ValueError
. This should always be documented for the function at hand.
- exception can.exceptions.CanError(message='', error_code=None)[source]#
Bases:
Exception
Base class for all CAN related exceptions.
If specified, the error code is automatically appended to the message:
>>> # With an error code (it also works with a specific error): >>> error = CanOperationError(message="Failed to do the thing", error_code=42) >>> str(error) 'Failed to do the thing [Error Code 42]' >>> >>> # Missing the error code: >>> plain_error = CanError(message="Something went wrong ...") >>> str(plain_error) 'Something went wrong ...'
- exception can.exceptions.CanInitializationError(message='', error_code=None)[source]#
Bases:
can.exceptions.CanError
Indicates an error the occurred while initializing a
can.BusABC
.If initialization fails due to a driver or platform missing/being unsupported, a
CanInterfaceNotImplementedError
is raised instead. If initialization fails due to a value being out of range, aValueError
is raised.- Example scenarios:
Try to open a non-existent device and/or channel
Try to use an invalid setting, which is ok by value, but not ok for the interface
The device or other resources are already used
- exception can.exceptions.CanInterfaceNotImplementedError(message='', error_code=None)[source]#
Bases:
can.exceptions.CanError
,NotImplementedError
Indicates that the interface is not supported on the current platform.
- Example scenarios:
No interface with that name exists
The interface is unsupported on the current operating system or interpreter
The driver could not be found or has the wrong version
- exception can.exceptions.CanOperationError(message='', error_code=None)[source]#
Bases:
can.exceptions.CanError
Indicates an error while in operation.
- Example scenarios:
A call to a library function results in an unexpected return value
An invalid message was received
The driver rejected a message that was meant to be sent
Cyclic redundancy check (CRC) failed
A message remained unacknowledged
A buffer is full
- exception can.exceptions.CanTimeoutError(message='', error_code=None)[source]#
Bases:
can.exceptions.CanError
,TimeoutError
Indicates the timeout of an operation.
- Example scenarios:
Some message could not be sent after the timeout elapsed
No message was read within the given time
- can.exceptions.error_check(error_message=None, exception_type=<class 'can.exceptions.CanOperationError'>)[source]#
Catches any exceptions and turns them into the new type while preserving the stack trace.
- Parameters
exception_type (Type[can.exceptions.CanError]) –
- Return type
collections.abc.Generator[None, None, None]