diff --git a/devlib/exception.py b/devlib/exception.py index 0004a4b..2f5018c 100644 --- a/devlib/exception.py +++ b/devlib/exception.py @@ -105,6 +105,16 @@ class WorkerThreadError(DevlibError): super(WorkerThreadError, self).__init__(message) +class KernelConfigKeyError(KeyError, IndexError, DevlibError): + """ + Exception raised when a kernel config option cannot be found. + + It inherits from :exc:`IndexError` for backward compatibility, and + :exc:`KeyError` to behave like a regular mapping. + """ + pass + + def get_traceback(exc=None): """ Returns the string with the traceback for the specifiec exc diff --git a/devlib/target.py b/devlib/target.py index ebeea40..094fb64 100644 --- a/devlib/target.py +++ b/devlib/target.py @@ -36,7 +36,7 @@ from devlib.module import get_module from devlib.platform import Platform from devlib.exception import (DevlibTransientError, TargetStableError, TargetNotRespondingError, TimeoutError, - TargetTransientError) # pylint: disable=redefined-builtin + TargetTransientError, KernelConfigKeyError) # pylint: disable=redefined-builtin from devlib.utils.ssh import SshConnection from devlib.utils.android import AdbConnection, AndroidProperties, LogcatMonitor, adb_command, adb_disconnect, INTENT_FLAGS from devlib.utils.misc import memoized, isiterable, convert_new_lines @@ -1810,7 +1810,10 @@ class KernelConfig(object): res = self._config.get(name) if not res and strict: - raise IndexError("{} is not exposed in target's config") + raise KernelConfigKeyError( + "{} is not exposed in kernel config".format(name), + name + ) return self._config.get(name)