diff --git a/core/registrar/registrar.py b/core/registrar/registrar.py
index 968ff05422939d68ec30bd83c3ad62f963a37091..bcd4800d46d6a2c1d6f3b86ebe95385f67fe8b8f 100644
--- a/core/registrar/registrar.py
+++ b/core/registrar/registrar.py
@@ -1,11 +1,11 @@
 import re
 import logging
-import importlib
 
 from .source import get_source
 from .scheme import get_scheme
 from .backend import get_backends
 from .exceptions import RegistrationError
+from .utils import import_by_path
 
 
 logger = logging.getLogger(__name__)
@@ -22,22 +22,27 @@ def register_file(config: dict, path: str, replace: bool=False):
     for pre_handler in get_pre_handlers(config):
         pre_handler(config, path, context)
 
-    for backend in get_backends(config, path):
-        if backend.exists(source, context):
-            if replace:
-                logger.info(f"Replacing '{path}'.")
-                backend.register(source, context, replace=True)
+    try:
+        for backend in get_backends(config, path):
+            if backend.exists(source, context):
+                if replace:
+                    logger.info(f"Replacing '{path}'.")
+                    backend.register(source, context, replace=True)
+                else:
+                    raise RegistrationError(f'Object {context} is already registered')
             else:
-                raise RegistrationError(f'Object {context} is already registered')
-        else:
-            logger.info(f"Registering '{path}'.")
-            backend.register(source, context, replace=False)
+                logger.info(f"Registering '{path}'.")
+                backend.register(source, context, replace=False)
+    except Exception as e:
+        for error_handler in get_error_handlers(config):
+            error_handler(config, path, context, e)
+        raise
+    else:
+        for post_handler in get_post_handlers(config):
+            post_handler(config, path, context)
 
-    for post_handler in get_post_handlers(config):
-        post_handler(config, path, context)
-
-    logger.info(f"Successfully {'replaced' if replace else 'registered'} '{path}'")
-    return context
+        logger.info(f"Successfully {'replaced' if replace else 'registered'} '{path}'")
+        return context
 
 
 def _get_handlers(config, name):
@@ -61,3 +66,7 @@ def get_pre_handlers(config):
 
 def get_post_handlers(config):
     return _get_handlers(config, 'post_handlers')
+
+
+def get_error_handlers(config):
+    return _get_handlers(config, 'error_handlers')