diff options
author | Brett Cannon <brett@python.org> | 2013-06-12 20:59:46 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2013-06-12 20:59:46 (GMT) |
commit | b1611e2772af2c6eb73a6b3d04b3dbb43308fa6c (patch) | |
tree | 7cd26cc5f09f341a69572c40f16638053ae86d08 /Objects | |
parent | 638ce0779b4dceea39c2f77346aeab9824e48548 (diff) | |
download | cpython-b1611e2772af2c6eb73a6b3d04b3dbb43308fa6c.zip cpython-b1611e2772af2c6eb73a6b3d04b3dbb43308fa6c.tar.gz cpython-b1611e2772af2c6eb73a6b3d04b3dbb43308fa6c.tar.bz2 |
Issue #15767: Introduce ModuleNotFoundError, a subclass of
ImportError.
The exception is raised by import when a module could not be found.
Technically this is defined as no viable loader could be found for the
specified module. This includes ``from ... import`` statements so that
the module usage is consistent for all situations where import
couldn't find what was requested.
This should allow for the common idiom of::
try:
import something
except ImportError:
pass
to be updated to using ModuleNotFoundError and not accidentally mask
ImportError messages that should propagate (e.g. issues with a
loader).
This work was driven by the fact that the ``from ... import``
statement needed to be able to tell the difference between an
ImportError that simply couldn't find a module (and thus silence the
exception so that ceval can raise it) and an ImportError that
represented an actual problem.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/exceptions.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 79bbb8f..23f6605 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -710,6 +710,13 @@ ComplexExtendsException(PyExc_Exception, ImportError, "module."); /* + * ModuleNotFoundError extends ImportError + */ + +MiddlingExtendsException(PyExc_ImportError, ModuleNotFoundError, ImportError, + "Module not found."); + +/* * OSError extends Exception */ @@ -2395,6 +2402,7 @@ _PyExc_Init(PyObject *bltinmod) PRE_INIT(SystemExit) PRE_INIT(KeyboardInterrupt) PRE_INIT(ImportError) + PRE_INIT(ModuleNotFoundError) PRE_INIT(OSError) PRE_INIT(EOFError) PRE_INIT(RuntimeError) @@ -2465,6 +2473,7 @@ _PyExc_Init(PyObject *bltinmod) POST_INIT(SystemExit) POST_INIT(KeyboardInterrupt) POST_INIT(ImportError) + POST_INIT(ModuleNotFoundError) POST_INIT(OSError) INIT_ALIAS(EnvironmentError, OSError) INIT_ALIAS(IOError, OSError) |