diff --git a/mmengine/registry/registry.py b/mmengine/registry/registry.py index 3c55ca140394b04b5c2c273618673803150b1267..f0e59a7e01b1b57a57f9b1d8e7a655512692be55 100644 --- a/mmengine/registry/registry.py +++ b/mmengine/registry/registry.py @@ -1,6 +1,7 @@ # Copyright (c) OpenMMLab. All rights reserved. import inspect import sys +import warnings from collections.abc import Callable from typing import Any, Dict, List, Optional, Tuple, Type, Union @@ -382,8 +383,14 @@ class Registry: root = self._get_root_registry() registry = root._search_child(default_scope) if registry is None: - raise KeyError( - f'{default_scope} does not exist in the registry tree.') + # if `default_scope` can not be found, fallback to use self + warnings.warn( + f'Failed to search registry named "{default_scope}". ' + 'As a workaround, the current registry is used to build ' + 'instance. This may cause unexpected failure when running ' + 'the built modules. Please check whether ' + f'"{default_scope}" is a correct scope.') + registry = self else: registry = self diff --git a/tests/test_registry/test_registry.py b/tests/test_registry/test_registry.py index 61d55c9acbb2543eeeb3f94cd76eadd92906f31c..344762d7327b8afcf20846a6acdba09296b4deb0 100644 --- a/tests/test_registry/test_registry.py +++ b/tests/test_registry/test_registry.py @@ -341,14 +341,14 @@ class TestRegistry: assert isinstance(MID_HOUNDS.build(b_cfg), Beagle) # test `default_scope` - # `default_scope` is an invalid scope - with pytest.raises(KeyError): - LITTLE_HOUNDS.build(b_cfg, default_scope='invalid_mid_hound') - # switch the current registry to another registry dog = LITTLE_HOUNDS.build(b_cfg, default_scope='mid_hound') assert isinstance(dog, Beagle) + # `default_scope` can not be found + dog = MID_HOUNDS.build(b_cfg, default_scope='scope-not-found') + assert isinstance(dog, Beagle) + def test_repr(self): CATS = Registry('cat')