Exception Objects¶
Exception Types and Classifiers¶
New in version 1.2.1.
Couchbase exceptions may be caught in two flavors. You can catch an exception either by its explicit subclass or by its base class.
Normally you should catch exception classes for cases you don’t have a specific handler for, and error details for things that need special handling. Thus for example:
try:
cb.get("foo")
except NotFoundError:
print("Item does not exist")
except CouchbaseTransientError:
print("Transient error received. Handling and backing off")
Where NotFoundError is a specific error detail code indicating the item has not been found, and CouchbaseTransientError is an error category indicating the specific cause is likely transient.
As your application evolves you may wish to examine the specific error code received as well as log the information to the screen.
Employing the error classifier pattern will prove scalable when additional error codes are added to the library. Sticking to catching error codes rather than specific error categories will allow your application to deal gracefully with future error codes so long as they match a specific category.
You may also employ a different use model, for example:
try:
cb.get("foo")
except CouchbaseError as e:
if e.is_data and isinstance(e, NotFoundError):
# handle not found
pass
elif e.is_network:
print("Got network error")
elif e.is_data:
print("Got other data-related error")
else:
print("Got unhandled error code")
Base Exception Object¶
This object is the base class for all exceptions thrown by Couchbase which are specific to the library. Other standard Python exceptions may still be thrown depending on the condition.
-
exception
couchbase.exceptions.
CouchbaseError
(params=None)[source]¶ Base exception for Couchbase errors
This is the base class for all exceptions thrown by Couchbase
Exception Attributes
-
rc
¶
The return code which caused the error
AMultiResult
object, if this exception was thrown as part of a multi-operation. This contains all the operations (including ones which may not have failed)-
inner_cause
¶ If this exception was triggered by another exception, it is present here.
-
key
¶ If applicable, this is the key which failed.
-
csrc_info
¶ A tuple of (file, line) pointing to a location in the C source code where the exception was thrown (if applicable)
-
categories
¶ An integer representing a set of bits representing various error categories for the specific error as returned by libcouchbase.
-
is_data
¶ True if this error is a negative reply from the server (see
CouchbaseDataError
)
-
is_transient
¶ True if this error was likely caused by a transient condition (see
CouchbaseTransientError
)
-
is_fatal
¶ True if this error indicates a likely fatal condition for the client. See
CouchbaseFatalError
-
is_network
¶ True if errors were received during TCP transport. See
CouchbaseNetworkError
-
categories
Gets the exception categories (as a set of bits)
-
classmethod
rc_to_exctype
(rc)[source]¶ Map an error code to an exception
Parameters: rc (int) – The error code received for an operation Returns: a subclass of CouchbaseError
-
split_results
()[source]¶ Convenience method to separate failed and successful results.
New in version 2.0.0.
This function will split the results of the failed operation (see
all_results
) into “good” and “bad” dictionaries.The intent is for the application to handle any successful results in a success code path, and handle any failed results in a “retry” code path. For example
try: cb.add_multi(docs) except CouchbaseTransientError as e: # Temporary failure or server OOM _, fail = e.split_results() # Sleep for a bit to reduce the load on the server time.sleep(0.5) # Try to add only the failed results again cb.add_multi(fail)
Of course, in the example above, the second retry may fail as well, and a more robust implementation is left as an exercise to the reader.
Returns: A tuple of ( ok, bad ) dictionaries.
-
Exception Categories¶
These categories form the base exception classes
-
exception
couchbase.exceptions.
CouchbaseNetworkError
(params=None)[source]¶ Base class for network-related errors. These indicate issues in the low level connectivity
-
exception
couchbase.exceptions.
CouchbaseInputError
(params=None)[source]¶ Base class for errors possibly caused by malformed input
-
exception
couchbase.exceptions.
CouchbaseFatalError
(params=None)[source]¶ Base class for errors which are likely fatal and require reinitialization of the instance
Exception Details¶
The following codes are exception details. They all derive from
CouchbaseError
. Many of them will have multiple error categories and thus
be inherited from multiple exception categories.
-
exception
couchbase.exceptions.
ArgumentError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Invalid argument
A given argument is invalid or must be set
-
exception
couchbase.exceptions.
ValueFormatError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Failed to decode or encode value
-
exception
couchbase.exceptions.
AuthError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Authentication failed
You provided an invalid username/password combination.
-
exception
couchbase.exceptions.
DeltaBadvalError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The given value is not a number
The server detected that operation cannot be executed with requested arguments. For example, when incrementing not a number.
-
exception
couchbase.exceptions.
TooBigError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Object too big
The server reported that this object is too big
-
exception
couchbase.exceptions.
BusyError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The cluster is too busy
The server is too busy to handle your request right now. please back off and try again at a later time.
-
exception
couchbase.exceptions.
InternalError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Internal Error
Internal error inside the library. You would have to destroy the instance and create a new one to recover.
-
exception
couchbase.exceptions.
InvalidError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Invalid arguments specified
-
exception
couchbase.exceptions.
NoMemoryError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The server ran out of memory
-
exception
couchbase.exceptions.
RangeError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
An invalid range specified
-
exception
couchbase.exceptions.
LibcouchbaseError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
A generic error
-
exception
couchbase.exceptions.
TemporaryFailError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Temporary failure (on server)
The server tried to perform the requested operation, but failed due to a temporary constraint. Retrying the operation may work.
This error may also be delivered if the key being accessed was locked.
-
exception
couchbase.exceptions.
KeyExistsError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The key already exists (with another CAS value)
This exception may be thrown during an
add()
operation (if the key already exists), or when a CAS is supplied and the server-side CAS differs.
-
exception
couchbase.exceptions.
NotFoundError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The key does not exist
-
exception
couchbase.exceptions.
DlopenFailedError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Failed to open shared object
-
exception
couchbase.exceptions.
DlsymFailedError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Failed to locate the requested symbol in the shared object
-
exception
couchbase.exceptions.
NetworkError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseNetworkError
Network error
A network related problem occured (name lookup, read/write/connect etc)
-
exception
couchbase.exceptions.
NotMyVbucketError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The vbucket is not located on this server
The server who received the request is not responsible for the object anymore. (This happens during changes in the cluster topology)
-
exception
couchbase.exceptions.
NotStoredError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The object was not stored on the server
-
exception
couchbase.exceptions.
NotSupportedError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Not supported
The server doesn’t support the requested command. This error differs from
couchbase.exceptions.UnknownCommandError
by that the server knows about the command, but for some reason decided to not support it.
-
exception
couchbase.exceptions.
UnknownCommandError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The server doesn’t know what that command is
-
exception
couchbase.exceptions.
UnknownHostError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseNetworkError
The server failed to resolve the requested hostname
-
exception
couchbase.exceptions.
ProtocolError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseNetworkError
Protocol error
There is something wrong with the datastream received from the server
-
exception
couchbase.exceptions.
TimeoutError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The operation timed out
-
exception
couchbase.exceptions.
ConnectError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseNetworkError
Failed to connect to the requested server
-
exception
couchbase.exceptions.
BucketNotFoundError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The requested bucket does not exist
-
exception
couchbase.exceptions.
ClientNoMemoryError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
The client ran out of memory
-
exception
couchbase.exceptions.
ClientTemporaryFailError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Temporary failure (on client)
The client encountered a temporary error (retry might resolve the problem)
-
exception
couchbase.exceptions.
BadHandleError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Invalid handle type
The requested operation isn’t allowed for given type.
-
exception
couchbase.exceptions.
HTTPError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
HTTP error
-
exception
couchbase.exceptions.
SubdocPathNotFoundError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Subdocument path does not exist
-
exception
couchbase.exceptions.
SubdocPathExistsError
(params=None)[source]¶ Bases:
couchbase.exceptions.CouchbaseError
Subdocument path already exists (and shouldn’t)