New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
importlib does not properly remove frames when invoking external import hooks #67961
Comments
When adding a custom module loader to sys.meta_path, importlib does not properly remove its frames before invoking it. This results in a weird traceback with importlib._bootstrap frames in if an error occurs during load_module(), like such: Traceback (most recent call last):
File "/Users/mark/Development/Projects/rave/rave/bootstrap/__init__.py", line 102, in bootstrap_game
__import__(MODULE_PACKAGE + '.' + mod.replace('.py', ''))
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "/Users/mark/Development/Projects/rave/rave/modularity.py", line 23, in exec_module
super().exec_module(module)
File "/.modules/opengl/__init__.py", line 1, in <module>
from . import common, core3
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "/Users/mark/Development/Projects/rave/rave/modularity.py", line 23, in exec_module
super().exec_module(module)
File "/.modules/opengl/core3/__init__.py", line 11, in <module>
from .texture import Texture, Image
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
File "<frozen importlib._bootstrap>", line 1129, in _exec
File "/Users/mark/Development/Projects/rave/rave/modularity.py", line 23, in exec_module
super().exec_module(module)
File "/.modules/opengl/core3/texture.py", line 8, in <module>
raise ValueError Attached is a patch against the current hg head that makes sure module loaders are invoked through _call_with_frames_removed, so that the output becomes a lot more readable: Traceback (most recent call last):
File "/Users/mark/Development/Projects/rave/rave/bootstrap/__init__.py", line 102, in bootstrap_game
__import__(MODULE_PACKAGE + '.' + mod.replace('.py', ''))
File "/Users/mark/Development/Projects/rave/rave/modularity.py", line 23, in exec_module
super().exec_module(module)
File "/.modules/opengl/__init__.py", line 1, in <module>
from . import common, core3
File "/Users/mark/Development/Projects/rave/rave/modularity.py", line 23, in exec_module
super().exec_module(module)
File "/.modules/opengl/core3/__init__.py", line 11, in <module>
from .texture import Texture, Image
File "/Users/mark/Development/Projects/rave/rave/modularity.py", line 23, in exec_module
super().exec_module(module)
File "/.modules/opengl/core3/texture.py", line 8, in <module>
raise ValueError
ValueError Ideally it would remove the calls /within/ the module loader itself too, but I do not see an easy way to do this without changing the entire _call_with_frames_removed semantics. This fixes most of the issues, though. |
Did you happen to run the test suite with this change, Shiz? There's actually a test to make sure that the part of the traceback you're avoiding isn't lost in case there's a bug in importlib itself. Can you show that your change won't actually affect finding errors in importlib itself? |
Ah, that is a very good point. I'll run the suite as soon as I find the time and will report back. |
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
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: