From b3d54481fdd33e6db4d56490591b29c123431164 Mon Sep 17 00:00:00 2001 From: Zaida Zhou <58739961+zhouzaida@users.noreply.github.com> Date: Mon, 14 Mar 2022 00:44:16 +0800 Subject: [PATCH] [Fix] Fallback to use self registry if default_scope not found (#122) --- mmengine/registry/registry.py | 11 +++++++++-- tests/test_registry/test_registry.py | 8 ++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/mmengine/registry/registry.py b/mmengine/registry/registry.py index 3c55ca14..f0e59a7e 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 61d55c9a..344762d7 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') -- GitLab