You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
assignee=Noneclosed_at=<Date2017-05-24.22:20:40.688>created_at=<Date2017-03-19.00:09:56.344>labels= ['3.7', 'easy', 'type-feature', 'library']
title="Have importlib.reload() raise ModuleNotFoundError when a spec can't be found"updated_at=<Date2017-05-24.22:20:40.688>user='https://bugs.python.org/RichardCooper'
importlib.reload doesn't work; gives an error about NoneType having no name attribute.
See attached a simple repo testcase
When run it yields the following [disappointing] result. I'm running Python126.96.36.199 (installed from brew) on OSX 10.12.3
iMac:python_package_loader cooper$ python3 bug.py
Traceback (most recent call last):
File "bug.py", line 14, in <module>
File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/importlib/__init__.py", line 166, in reload
File "<frozen importlib._bootstrap>", line 589, in _exec
AttributeError: 'NoneType' object has no attribute 'name'
First, I don't know what version you're testing against because 188.8.131.52 isn't an actual release of Python and 3.6.1 isn't released yet (unless you know something I don't know :) ).
Second, the issue is that you're trying to import a module under a name which doesn't match the file specified. That's causing reload() to not be able to find the original source file to reload against, leading to the None being returned by importlib._bootstrap._find_spec() which is leading to the error you're seeing. (Remember, reload() basically runs like an import statement for the module you're reloading but recycles the module object.)
Third, while an exception is reasonable in this case, it is misleading and reload() should be updated to raise an ImportError if _bootstrap._find_spec() returns None.
I'm marking this issue as an easy fix since you just need to add an is None check on a return value and then raise ImportError if necessary in case someone wants to propose a PR to improve the error. It will require a doc update to document the change in the exception raised.