Error Handling#
This page covers error types and handling in bfabricPy.
Consult Exceptions and Errors for a complete API reference for exception types.
ResultContainer Error Handling#
When using client.read(), client.save(), or client.delete(), operations return a ResultContainer.
Note: Empty results are not errors. A query that finds no matching records is valid and returns an empty
ResultContainer. Errors only occur for issues like network failures, authentication problems, or server errors.
Automatic Error Checking (Default)#
By default, operations will raise a RuntimeError immediately if they fail:
# This raises RuntimeError if there's a server error
results = client.read(endpoint="sample", obj={"name": "MySample"})
# Access results only if successful
for result in results:
print(result["name"])
# Empty results are not errors - this is valid and returns an empty list
results = client.read(endpoint="sample", obj={"name": "NonExistentSample"})
Manual Error Checking#
To handle errors without exceptions, use check=False:
# Disable automatic error checking
results = client.read(endpoint="sample", obj={"name": "MySample"}, check=False)
# Check status manually
if results.is_success:
for result in results:
print(result["name"])
else:
print("Query failed:")
for error in results.errors:
print(f" - {error.message}")
Use manual checking when you need to:
Continue processing even if some operations fail
Collect errors from multiple operations
Implement custom error recovery logic
EntityReader Error Handling#
The EntityReader may raise different types of errors:
ValueError#
Raised when:
URI is invalid or from unsupported B-Fabric instance
bfabric_instanceparameter doesn’t match client’s configured instanceAll URIs in a batch are not from the same instance or entity type
from bfabric import Bfabric
from bfabric.entities.core.uri import EntityUri
client = Bfabric.connect()
reader = client.reader
try:
# This will raise ValueError if instance doesn't match
entity = reader.read_uri(
uri="https://different-instance.com/bfabric/sample/show.html?id=123"
)
except ValueError as e:
print(f"Error: {e}")
TypeError#
Raised when:
expected_typeparameter is provided but the entity doesn’t match
from bfabric import Bfabric
from bfabric.entities import Sample
client = Bfabric.connect()
reader = client.reader
try:
# This will raise TypeError if entity is not a Sample
entity = reader.read_id(
entity_type="project", entity_id=123, expected_type=Sample # Wrong type!
)
except TypeError as e:
print(f"Type error: {e}")
None Returns#
For read operations, None is returned (not an exception) when:
Entity is not found in B-Fabric
entity = reader.read_id(entity_type="sample", entity_id=999999)
if entity is None:
print("Sample not found")
else:
print(f"Found sample: {entity['name']}")
See Also#
Exceptions and Errors - Complete API reference for exception types