Skip to content

Error Reference

DataJoint exception classes and their meanings.

Exception Hierarchy

Exception
โ””โ”€โ”€ DataJointError
    โ”œโ”€โ”€ LostConnectionError
    โ”œโ”€โ”€ QueryError
    โ”‚   โ”œโ”€โ”€ QuerySyntaxError
    โ”‚   โ”œโ”€โ”€ AccessError
    โ”‚   โ”œโ”€โ”€ DuplicateError
    โ”‚   โ”œโ”€โ”€ IntegrityError
    โ”‚   โ”œโ”€โ”€ UnknownAttributeError
    โ”‚   โ””โ”€โ”€ MissingAttributeError
    โ”œโ”€โ”€ MissingTableError
    โ”œโ”€โ”€ MissingExternalFile
    โ””โ”€โ”€ BucketInaccessible

Base Exception

DataJointError

Base class for all DataJoint-specific errors.

try:
    # DataJoint operation
except dj.DataJointError as e:
    print(f"DataJoint error: {e}")

Connection Errors

LostConnectionError

Database connection was lost during operation.

Common causes:

  • Network interruption
  • Server timeout
  • Server restart

Resolution:

  • Check network connectivity
  • Reconnect with dj.conn().connect()

Query Errors

QuerySyntaxError

Invalid query syntax.

Common causes:

  • Malformed restriction string
  • Invalid attribute reference
  • SQL syntax error in projection

AccessError

Insufficient database privileges.

Common causes:

  • User lacks SELECT/INSERT/DELETE privileges
  • Schema access not granted

Resolution:

  • Contact database administrator
  • Check user grants

DuplicateError

Attempt to insert duplicate primary key.

try:
    table.insert1({'id': 1, 'name': 'Alice'})
    table.insert1({'id': 1, 'name': 'Bob'})  # Raises DuplicateError
except dj.errors.DuplicateError:
    print("Entry already exists")

Resolution:

  • Use insert(..., skip_duplicates=True)
  • Use insert(..., replace=True) to update
  • Check if entry exists before inserting

IntegrityError

Foreign key constraint violation.

Common causes:

  • Inserting row with non-existent parent
  • Parent row deletion blocked by children

Resolution:

  • Insert parent rows first
  • Use cascade delete for parent

UnknownAttributeError

Referenced attribute doesn't exist.

# Raises UnknownAttributeError
table.to_arrays('nonexistent_column')

Resolution:

  • Check table.heading for available attributes
  • Verify spelling

MissingAttributeError

Required attribute not provided in insert.

# Raises MissingAttributeError if 'name' is required
table.insert1({'id': 1})  # Missing 'name'

Resolution:

  • Provide all required attributes
  • Set default values in definition

Table Errors

MissingTableError

Table not declared in database.

Common causes:

  • Schema not created
  • Table class not instantiated
  • Database dropped

Resolution:

  • Check schema exists: schema.is_activated()
  • Verify table declaration

Storage Errors

MissingExternalFile

External file managed by DataJoint is missing.

Common causes:

  • File manually deleted from store
  • Store misconfigured
  • Network/permission issues

Resolution:

  • Check store configuration
  • Verify file exists at expected path
  • Run garbage collection audit

BucketInaccessible

S3 bucket cannot be accessed.

Common causes:

  • Invalid credentials
  • Bucket doesn't exist
  • Network/firewall issues

Resolution:

  • Verify AWS credentials
  • Check bucket name and region
  • Test with AWS CLI

Handling Errors

Catching Specific Errors

import datajoint as dj

try:
    table.insert1(data)
except dj.errors.DuplicateError:
    print("Entry exists, skipping")
except dj.errors.IntegrityError:
    print("Parent entry missing")
except dj.DataJointError as e:
    print(f"Other DataJoint error: {e}")

Error Information

try:
    table.insert1(data)
except dj.DataJointError as e:
    print(f"Error type: {type(e).__name__}")
    print(f"Message: {e}")
    print(f"Args: {e.args}")

See Also