ipython: ipython 8+ python crash on exception
Since version 8 in Ipython I frequently - very frequently - get IPython crashes (termination) of the kind below.
I think the specific situation is that I edit code, I use autoreload(3), there is a bug, but when IPython tries traceback it crashes and terminates. Since a main point of using IPython is the auto-reload, this makes it almost unusable for development compared to Version 7.x.x. (Certainly distracting enough to spend the time to finally post it here.)
I have seen there is a few other bugs of that kind reported, but I was not sure which would be similar enough to any of them, hence I post this separately. My apologies for any duplications.
I am not sure whether the error is strictly reproducible as it happens in situations when code is edited.
I use Python 3.10.2 built from source on Linux (Fedora 34).
I am using pylab mode which loads matplotlib, I am not sure whether their event loop may interfere with IPython. Just a thought.
In [15]: m.plot1()
Error in sys.excepthook:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1979, in showtraceback
stb = value._render_traceback_()
AttributeError: 'NotOneValueFound' object has no attribute '_render_traceback_'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1981, in showtraceback
stb = self.InteractiveTB.structured_traceback(etype,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 1105, in structured_traceback
return FormattedTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 999, in structured_traceback
return VerboseTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 871, in structured_traceback
formatted_exceptions += self.format_exception_as_a_whole(etype, evalue, etb, lines_of_context,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 804, in format_exception_as_a_whole
frames.append(self.format_record(r))
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 723, in format_record
result += ''.join(_format_traceback_lines(frame_info.lines, Colors, self.has_colors, lvals))
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 698, in lines
pieces = self.included_pieces
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 649, in included_pieces
pos = scope_pieces.index(self.executing_piece)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 628, in executing_piece
return only(
File "/home/alex/Python/lib/python3.10/site-packages/executing/executing.py", line 164, in only
raise NotOneValueFound('Expected one value, found 0')
executing.executing.NotOneValueFound: Expected one value, found 0
Original exception was:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 3361, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-15-0de954ff7b19>", line 1, in <cell line: 1>
File "/home/alex/python/source/multistar/base.py", line 586, in plot1
rr = norm(self.y[self.y_rad])
AttributeError: 'Direct' object has no attribute 'y_rad'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1979, in showtraceback
stb = value._render_traceback_()
AttributeError: 'AttributeError' object has no attribute '_render_traceback_'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 3301, in run_ast_nodes
if await self.run_code(code, result, async_=asy):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 3378, in run_code
self.showtraceback(running_compiled_code=True)
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1981, in showtraceback
stb = self.InteractiveTB.structured_traceback(etype,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 1105, in structured_traceback
return FormattedTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 999, in structured_traceback
return VerboseTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 852, in structured_traceback
formatted_exception = self.format_exception_as_a_whole(etype, evalue, etb, number_of_lines_of_context,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 804, in format_exception_as_a_whole
frames.append(self.format_record(r))
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 723, in format_record
result += ''.join(_format_traceback_lines(frame_info.lines, Colors, self.has_colors, lvals))
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 698, in lines
pieces = self.included_pieces
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 649, in included_pieces
pos = scope_pieces.index(self.executing_piece)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 628, in executing_piece
return only(
File "/home/alex/Python/lib/python3.10/site-packages/executing/executing.py", line 164, in only
raise NotOneValueFound('Expected one value, found 0')
executing.executing.NotOneValueFound: Expected one value, found 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1979, in showtraceback
stb = value._render_traceback_()
AttributeError: 'NotOneValueFound' object has no attribute '_render_traceback_'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 2900, in _run_cell
return runner(coro)
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/async_helpers.py", line 129, in _pseudo_sync_runner
coro.send(None)
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 3098, in run_cell_async
has_raised = await self.run_ast_nodes(code_ast.body, cell_name,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 3320, in run_ast_nodes
self.showtraceback()
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1981, in showtraceback
stb = self.InteractiveTB.structured_traceback(etype,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 1105, in structured_traceback
return FormattedTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 999, in structured_traceback
return VerboseTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 871, in structured_traceback
formatted_exceptions += self.format_exception_as_a_whole(etype, evalue, etb, lines_of_context,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 804, in format_exception_as_a_whole
frames.append(self.format_record(r))
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 723, in format_record
result += ''.join(_format_traceback_lines(frame_info.lines, Colors, self.has_colors, lvals))
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 698, in lines
pieces = self.included_pieces
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 649, in included_pieces
pos = scope_pieces.index(self.executing_piece)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 628, in executing_piece
return only(
File "/home/alex/Python/lib/python3.10/site-packages/executing/executing.py", line 164, in only
raise NotOneValueFound('Expected one value, found 0')
executing.executing.NotOneValueFound: Expected one value, found 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1979, in showtraceback
stb = value._render_traceback_()
AttributeError: 'NotOneValueFound' object has no attribute '_render_traceback_'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/alex/Python/bin/ipython3", line 8, in <module>
sys.exit(start_ipython())
File "/home/alex/Python/lib/python3.10/site-packages/IPython/__init__.py", line 123, in start_ipython
return launch_new_instance(argv=argv, **kwargs)
File "/home/alex/Python/lib/python3.10/site-packages/traitlets/config/application.py", line 846, in launch_instance
app.start()
File "/home/alex/Python/lib/python3.10/site-packages/IPython/terminal/ipapp.py", line 318, in start
self.shell.mainloop()
File "/home/alex/Python/lib/python3.10/site-packages/IPython/terminal/interactiveshell.py", line 653, in mainloop
self.interact()
File "/home/alex/Python/lib/python3.10/site-packages/IPython/terminal/interactiveshell.py", line 646, in interact
self.run_cell(code, store_history=True)
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 2854, in run_cell
result = self._run_cell(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 2905, in _run_cell
self.showtraceback(running_compiled_code=True)
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/interactiveshell.py", line 1981, in showtraceback
stb = self.InteractiveTB.structured_traceback(etype,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 1105, in structured_traceback
return FormattedTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 999, in structured_traceback
return VerboseTB.structured_traceback(
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 871, in structured_traceback
formatted_exceptions += self.format_exception_as_a_whole(etype, evalue, etb, lines_of_context,
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 804, in format_exception_as_a_whole
frames.append(self.format_record(r))
File "/home/alex/Python/lib/python3.10/site-packages/IPython/core/ultratb.py", line 723, in format_record
result += ''.join(_format_traceback_lines(frame_info.lines, Colors, self.has_colors, lvals))
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 698, in lines
pieces = self.included_pieces
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 649, in included_pieces
pos = scope_pieces.index(self.executing_piece)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/utils.py", line 145, in cached_property_wrapper
value = obj.__dict__[self.func.__name__] = self.func(obj)
File "/home/alex/Python/lib/python3.10/site-packages/stack_data/core.py", line 628, in executing_piece
return only(
File "/home/alex/Python/lib/python3.10/site-packages/executing/executing.py", line 164, in only
raise NotOneValueFound('Expected one value, found 0')
executing.executing.NotOneValueFound: Expected one value, found 0
About this issue
- Original URL
- State: open
- Created 2 years ago
- Reactions: 12
- Comments: 42 (15 by maintainers)
Commits related to this issue
- Attempt at debugging #13598 — committed to Carreau/ipython by Carreau 2 years ago
- Attempt at debugging #13598 — committed to Carreau/ipython by Carreau 2 years ago
- Merge pull request #13604 from Carreau/debug-13598 Attempt at debugging #13598 — committed to ipython/ipython by Carreau 2 years ago
- Attempt at debugging #13598 — committed to jdtsmith/ipython by Carreau 2 years ago
- Prevent crash on StackData NotOneValueFound. This is a workaround for #13598, It does not fix the root cause, but should prevent IPython crash. Worst case it should just not show the relevant frame — committed to Carreau/ipython by Carreau 6 months ago
- Prevent crash on StackData NotOneValueFound. (#14286) This is a workaround for #13598, It does not fix the root cause, but should prevent IPython crash. Worst case it should just not show the r... — committed to ipython/ipython by Carreau 6 months ago
New fix is released in
executing
1.0.0!Here’s a repro for this. On my system I was able to consistently trigger this type of exception by importlib.reload’ing a module. It seems ipython gets confused when the module changes on disk and the old source location of the error does not align with the new source location. I can imagine that running conda/pip/other package managers while ipython is running may also cause this issue.
I’m running jupyterlab 3.4.3, jupyter-nbclassic 0.3.7, jupyter-notebook 6.4.12, and python 3.10.5 on Arch Linux x86_64.
To reproduce, run these three ipython cells in order:
Cell 1
Output:
Cell 2
Output:
Cell 3
Output:
@alexmojaki A way to catch reloading modules would be to insert a
MetaPathFinder
at index 0 ofsys.meta_path
. When any module is reloaded, that finder will get itsfind_spec
method called with the original path of the modules__init__.py
as thetarget
argument (which otherwise would beNone
). Thus, this finder can catch when any module is re-imported and you could use it to just drop all caches when that happens.IMHO this solution is pretty minimally invasive, as it does not mess around with python’s actual importing machinery.
Here’s a demo:
Output:
Just encountered this in fairly current IPython, this env has:
Went away on restart kernel + clear all outputs, sorry to not have any more concrete repro info. (Edit: to clarify, the context was fairly chaotic, was actually debugging repr code for an exception class that in my code is triggered via a magic – so lots of restarting + raising in a non-recoverable sequence. Exactly the sort of scenario where you’d expect a bug like this to pop up if it can, but not helpful for repro.)
Greetings all! I’m just a random developer that ran into this bug and @alexmojaki said that the fix was in
executing 1.0.0
, however even havingexecuting
version1.2.0
the bug remains.Thanks for the report @jaymegordo. It’s interesting that you’re still experiencing with the combination of the latest
executing
andautoreload
, which isn’t supposed to happen. That suggests that either there’s anotherMetaPathFinder
getting in the way as @yonatanp feared, or there’s a bug in mine.In any case, I have a plan for a completely general solution, which wouldn’t rely on a MetaPathFinder and would include situations that don’t involve reloading modules like @ChrisBarker-NOAA repeatedly running files. I should have it done this weekend.
I get the same long stream of errors that end with “executing.executing.NotOneValueFound: Expected one value, found 0” on windows with ipython 8.4.0 (python 3.9.2). I just start ipython, import, edit, re-import and at some point when my script raises an error I get it.