mirror of
https://github.com/python/cpython.git
synced 2025-07-08 03:45:36 +00:00
Issue #15767: Add ModuleNotFoundError.
This commit is contained in:
parent
86a7668426
commit
c943265ba5
8 changed files with 42 additions and 2 deletions
|
@ -782,6 +782,8 @@ the variables:
|
||||||
+-----------------------------------------+---------------------------------+----------+
|
+-----------------------------------------+---------------------------------+----------+
|
||||||
| :c:data:`PyExc_ImportError` | :exc:`ImportError` | |
|
| :c:data:`PyExc_ImportError` | :exc:`ImportError` | |
|
||||||
+-----------------------------------------+---------------------------------+----------+
|
+-----------------------------------------+---------------------------------+----------+
|
||||||
|
| :c:data:`PyExc_ModuleNotFoundError` | :exc:`ModuleNotFoundError` | |
|
||||||
|
+-----------------------------------------+---------------------------------+----------+
|
||||||
| :c:data:`PyExc_IndexError` | :exc:`IndexError` | |
|
| :c:data:`PyExc_IndexError` | :exc:`IndexError` | |
|
||||||
+-----------------------------------------+---------------------------------+----------+
|
+-----------------------------------------+---------------------------------+----------+
|
||||||
| :c:data:`PyExc_InterruptedError` | :exc:`InterruptedError` | |
|
| :c:data:`PyExc_InterruptedError` | :exc:`InterruptedError` | |
|
||||||
|
|
|
@ -170,8 +170,9 @@ The following exceptions are the exceptions that are usually raised.
|
||||||
|
|
||||||
.. exception:: ImportError
|
.. exception:: ImportError
|
||||||
|
|
||||||
Raised when an :keyword:`import` statement fails to find the module definition
|
Raised when the :keyword:`import` statement has troubles trying to
|
||||||
or when a ``from ... import`` fails to find a name that is to be imported.
|
load a module. Also raised when the "from list" in ``from ... import``
|
||||||
|
has a name that cannot be found.
|
||||||
|
|
||||||
The :attr:`name` and :attr:`path` attributes can be set using keyword-only
|
The :attr:`name` and :attr:`path` attributes can be set using keyword-only
|
||||||
arguments to the constructor. When set they represent the name of the module
|
arguments to the constructor. When set they represent the name of the module
|
||||||
|
@ -181,6 +182,14 @@ The following exceptions are the exceptions that are usually raised.
|
||||||
.. versionchanged:: 3.3
|
.. versionchanged:: 3.3
|
||||||
Added the :attr:`name` and :attr:`path` attributes.
|
Added the :attr:`name` and :attr:`path` attributes.
|
||||||
|
|
||||||
|
.. exception:: ModuleNotFoundError
|
||||||
|
|
||||||
|
A subclass of :exc:`ImportError` which is raised by :keyword:`import`
|
||||||
|
when a module could not be located. It is also raised when ``None``
|
||||||
|
is found in :data:`sys.modules`.
|
||||||
|
|
||||||
|
.. versionadded:: 3.6
|
||||||
|
|
||||||
|
|
||||||
.. exception:: IndexError
|
.. exception:: IndexError
|
||||||
|
|
||||||
|
|
|
@ -160,6 +160,7 @@ PyAPI_DATA(PyObject *) PyExc_EOFError;
|
||||||
PyAPI_DATA(PyObject *) PyExc_FloatingPointError;
|
PyAPI_DATA(PyObject *) PyExc_FloatingPointError;
|
||||||
PyAPI_DATA(PyObject *) PyExc_OSError;
|
PyAPI_DATA(PyObject *) PyExc_OSError;
|
||||||
PyAPI_DATA(PyObject *) PyExc_ImportError;
|
PyAPI_DATA(PyObject *) PyExc_ImportError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ModuleNotFoundError;
|
||||||
PyAPI_DATA(PyObject *) PyExc_IndexError;
|
PyAPI_DATA(PyObject *) PyExc_IndexError;
|
||||||
PyAPI_DATA(PyObject *) PyExc_KeyError;
|
PyAPI_DATA(PyObject *) PyExc_KeyError;
|
||||||
PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt;
|
PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt;
|
||||||
|
|
|
@ -242,3 +242,10 @@ PYTHON3_OSERROR_EXCEPTIONS = (
|
||||||
|
|
||||||
for excname in PYTHON3_OSERROR_EXCEPTIONS:
|
for excname in PYTHON3_OSERROR_EXCEPTIONS:
|
||||||
REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'OSError')
|
REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'OSError')
|
||||||
|
|
||||||
|
PYTHON3_IMPORTERROR_EXCEPTIONS = (
|
||||||
|
'ModuleNotFoundError',
|
||||||
|
)
|
||||||
|
|
||||||
|
for excname in PYTHON3_IMPORTERROR_EXCEPTIONS:
|
||||||
|
REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'ImportError')
|
||||||
|
|
|
@ -14,6 +14,7 @@ BaseException
|
||||||
+-- BufferError
|
+-- BufferError
|
||||||
+-- EOFError
|
+-- EOFError
|
||||||
+-- ImportError
|
+-- ImportError
|
||||||
|
+-- ModuleNotFoundError
|
||||||
+-- LookupError
|
+-- LookupError
|
||||||
| +-- IndexError
|
| +-- IndexError
|
||||||
| +-- KeyError
|
| +-- KeyError
|
||||||
|
|
|
@ -335,6 +335,9 @@ class CompatPickleTests(unittest.TestCase):
|
||||||
if (module2, name2) == ('exceptions', 'OSError'):
|
if (module2, name2) == ('exceptions', 'OSError'):
|
||||||
attr = getattribute(module3, name3)
|
attr = getattribute(module3, name3)
|
||||||
self.assertTrue(issubclass(attr, OSError))
|
self.assertTrue(issubclass(attr, OSError))
|
||||||
|
elif (module2, name2) == ('exceptions', 'ImportError'):
|
||||||
|
attr = getattribute(module3, name3)
|
||||||
|
self.assertTrue(issubclass(attr, ImportError))
|
||||||
else:
|
else:
|
||||||
module, name = mapping(module2, name2)
|
module, name = mapping(module2, name2)
|
||||||
if module3[:1] != '_':
|
if module3[:1] != '_':
|
||||||
|
@ -401,6 +404,11 @@ class CompatPickleTests(unittest.TestCase):
|
||||||
if exc is not OSError and issubclass(exc, OSError):
|
if exc is not OSError and issubclass(exc, OSError):
|
||||||
self.assertEqual(reverse_mapping('builtins', name),
|
self.assertEqual(reverse_mapping('builtins', name),
|
||||||
('exceptions', 'OSError'))
|
('exceptions', 'OSError'))
|
||||||
|
elif exc is not ImportError and issubclass(exc, ImportError):
|
||||||
|
self.assertEqual(reverse_mapping('builtins', name),
|
||||||
|
('exceptions', 'ImportError'))
|
||||||
|
self.assertEqual(mapping('exceptions', name),
|
||||||
|
('exceptions', name))
|
||||||
else:
|
else:
|
||||||
self.assertEqual(reverse_mapping('builtins', name),
|
self.assertEqual(reverse_mapping('builtins', name),
|
||||||
('exceptions', name))
|
('exceptions', name))
|
||||||
|
|
|
@ -8043,6 +8043,9 @@ Core and Builtins
|
||||||
- Issue #18137: Detect integer overflow on precision in float.__format__()
|
- Issue #18137: Detect integer overflow on precision in float.__format__()
|
||||||
and complex.__format__().
|
and complex.__format__().
|
||||||
|
|
||||||
|
- Issue #15767: Introduce ModuleNotFoundError which is raised when a module
|
||||||
|
could not be found.
|
||||||
|
|
||||||
- Issue #18183: Fix various unicode operations on strings with large unicode
|
- Issue #18183: Fix various unicode operations on strings with large unicode
|
||||||
codepoints.
|
codepoints.
|
||||||
|
|
||||||
|
|
|
@ -705,6 +705,13 @@ ComplexExtendsException(PyExc_Exception, ImportError,
|
||||||
"Import can't find module, or can't find name in "
|
"Import can't find module, or can't find name in "
|
||||||
"module.");
|
"module.");
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ModuleNotFoundError extends ImportError
|
||||||
|
*/
|
||||||
|
|
||||||
|
MiddlingExtendsException(PyExc_ImportError, ModuleNotFoundError, ImportError,
|
||||||
|
"Module not found.");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* OSError extends Exception
|
* OSError extends Exception
|
||||||
*/
|
*/
|
||||||
|
@ -2469,6 +2476,7 @@ _PyExc_Init(PyObject *bltinmod)
|
||||||
PRE_INIT(SystemExit)
|
PRE_INIT(SystemExit)
|
||||||
PRE_INIT(KeyboardInterrupt)
|
PRE_INIT(KeyboardInterrupt)
|
||||||
PRE_INIT(ImportError)
|
PRE_INIT(ImportError)
|
||||||
|
PRE_INIT(ModuleNotFoundError)
|
||||||
PRE_INIT(OSError)
|
PRE_INIT(OSError)
|
||||||
PRE_INIT(EOFError)
|
PRE_INIT(EOFError)
|
||||||
PRE_INIT(RuntimeError)
|
PRE_INIT(RuntimeError)
|
||||||
|
@ -2541,6 +2549,7 @@ _PyExc_Init(PyObject *bltinmod)
|
||||||
POST_INIT(SystemExit)
|
POST_INIT(SystemExit)
|
||||||
POST_INIT(KeyboardInterrupt)
|
POST_INIT(KeyboardInterrupt)
|
||||||
POST_INIT(ImportError)
|
POST_INIT(ImportError)
|
||||||
|
POST_INIT(ModuleNotFoundError)
|
||||||
POST_INIT(OSError)
|
POST_INIT(OSError)
|
||||||
INIT_ALIAS(EnvironmentError, OSError)
|
INIT_ALIAS(EnvironmentError, OSError)
|
||||||
INIT_ALIAS(IOError, OSError)
|
INIT_ALIAS(IOError, OSError)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue