msg262352 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2016-03-24 15:06 |
Example of script.py: ------------------------- class Bla: def __del__(self): try: import xxxx except Exception as exc: print("import error: [%s] %r" % (type(exc), exc)) bla = Bla() ------------------------- Running this example logs a strange error: ------------------------- $ python3.5 script.py import error: [<class 'TypeError'>] TypeError("'NoneType' object is not iterable",) ------------------------- The error comes from importlib._bootstrap._find_spec() which tries to iterator on sys.meta_path, whereas PyImport_Cleanup() was called and this function setted sys.meta_path to None. Attached patch enhances _find_spec() to handle this case to return None. Error with the patch: ------------------------- $ python3.5 script.py import error: [<class 'ImportError'>] ImportError('sys.meta_path is None, Python is likely shutting down',) ------------------------- |
|
|
msg262367 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2016-03-24 16:57 |
Updated patch with a dot in the comment :-) Is ImportError the best exception in this case? |
|
|
msg262368 - (view) |
Author: Brett Cannon (brett.cannon) *  |
Date: 2016-03-24 17:00 |
Either ImportError or TypeError. ImportError makes sense since this is directly related to import semantics while TypeError makes sense as we are saying None specifically is not allowed. |
|
|
msg262375 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2016-03-24 20:49 |
I will reply to my own question: in fact, ImportError is more convenient. The "try/except ImportError" pattern is common, in some cases, it's acceptable to skip a whole module. For a direct example on import during Python shutdown, see the issue #21925: "ResourceWarning sometimes doesn't display" which adds "try/except ImportError" to be able to log warnings. @Brett, Eric: So, do you like importlib_shutdown-2.patch? |
|
|
msg262376 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2016-03-24 20:49 |
Oh. And is it ok to apply this change to Python 2.7 and 3.5? |
|
|
msg262378 - (view) |
Author: Brett Cannon (brett.cannon) *  |
Date: 2016-03-24 21:56 |
It's technically a change in semantics as it shifts what exception is raised, so I wouldn't backport it. |
|
|
msg262379 - (view) |
Author: STINNER Victor (vstinner) *  |
Date: 2016-03-24 21:59 |
> It's technically a change in semantics as it shifts what exception is raised, so I wouldn't backport it. Ok, I'm fine with only changing Python 3.6. |
|
|
msg262387 - (view) |
Author: Roundup Robot (python-dev)  |
Date: 2016-03-24 23:41 |
New changeset 14c56f697a85 by Victor Stinner in branch 'default': Fix bug in __import__ during Python shutdown https://hg.python.org/cpython/rev/14c56f697a85 |
|
|
msg262405 - (view) |
Author: Roundup Robot (python-dev)  |
Date: 2016-03-25 07:57 |
New changeset e2c482b60776 by Victor Stinner in branch 'default': Issue #26637: Fix test_io https://hg.python.org/cpython/rev/e2c482b60776 |
|
|