Specify what a loader must do if a load fails.
This commit is contained in:
parent
7a3465e69d
commit
2025481a4e
13
pep-0302.txt
13
pep-0302.txt
|
@ -251,21 +251,16 @@ Specification part 1: The Importer Protocol
|
||||||
the loader must create a new module object and add it to
|
the loader must create a new module object and add it to
|
||||||
sys.modules.
|
sys.modules.
|
||||||
|
|
||||||
In C code, all of these requirements can be met simply by using
|
|
||||||
the PyImport_AddModule() function, which returns the existing
|
|
||||||
module or creates a new one and adds it to sys.modules for you.
|
|
||||||
In Python code, you can use something like:
|
|
||||||
|
|
||||||
module = sys.modules.setdefault(fullname, new.module(fullname))
|
|
||||||
|
|
||||||
to accomplish the same results.
|
|
||||||
|
|
||||||
Note that the module object *must* be in sys.modules before the
|
Note that the module object *must* be in sys.modules before the
|
||||||
loader executes the module code. This is crucial because the
|
loader executes the module code. This is crucial because the
|
||||||
module code may (directly or indirectly) import itself; adding
|
module code may (directly or indirectly) import itself; adding
|
||||||
it to sys.modules beforehand prevents unbounded recursion in the
|
it to sys.modules beforehand prevents unbounded recursion in the
|
||||||
worst case and multiple loading in the best.
|
worst case and multiple loading in the best.
|
||||||
|
|
||||||
|
If the load fails, the loader needs to remove any module it may have
|
||||||
|
inserted into sys.modules. If the module was already in
|
||||||
|
sys.modules then the loader should leave it alone.
|
||||||
|
|
||||||
- The __file__ attribute must be set. This must be a string, but it
|
- The __file__ attribute must be set. This must be a string, but it
|
||||||
may be a dummy value, for example "<frozen>". The privilege of
|
may be a dummy value, for example "<frozen>". The privilege of
|
||||||
not having a __file__ attribute at all is reserved for built-in
|
not having a __file__ attribute at all is reserved for built-in
|
||||||
|
|
Loading…
Reference in New Issue