Repository navigation
"raise SyntaxError(NotImplemented)" exits REPL and IDLE subprocess #152490
Copy link
Copy link
Open
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-replRelated to the interactive shellRelated to the interactive shelltype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Since Python 3.14, using NotImplemented in a boolean context started to raise TypeError.
Due to this change, raising SyntaxError (or its subclasses) with argument NotImplemented causes TypeError exception chaining and forces restarting the IDLE Shell. It's not reproducible for other exception types.
MRE:
raise SyntaxError(NotImplemented)Traceback:
Traceback (most recent call last):
File "C:/Users/benja/AppData/Local/Programs/Python/Python314/example.py", line 1, in <module>
raise SyntaxError(NotImplemented)
Traceback (most recent call last):
File "C:/Users/benja/AppData/Local/Programs/Python/Python314/example.py", line 1, in <module>
raise SyntaxError(NotImplemented)
Traceback (most recent call last):
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 590, in runcode
exec(code, self.locals)
~~~~^^^^^^^^^^^^^^^^^^^
File "C:/Users/benja/AppData/Local/Programs/Python/Python314/example.py", line 1, in <module>
raise SyntaxError(NotImplemented)
Traceback (most recent call last):
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 590, in runcode
exec(code, self.locals)
~~~~^^^^^^^^^^^^^^^^^^^
File "C:/Users/benja/AppData/Local/Programs/Python/Python314/example.py", line 1, in <module>
raise SyntaxError(NotImplemented)
Traceback (most recent call last):
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 590, in runcode
exec(code, self.locals)
File "C:/Users/benja/AppData/Local/Programs/Python/Python314/example.py", line 1, in <module>
raise SyntaxError(NotImplemented)
File "<string>", line 0
SyntaxError: NotImplemented
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 172, in main
ret = method(*args, **kwargs)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 604, in runcode
print_exception()
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 278, in print_exception
print_exc(typ, val, tb)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 274, in print_exc
lines = get_message_lines(typ, exc, tb)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 240, in get_message_lines
return traceback.format_exception_only(typ, exc)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 181, in format_exception_only
return list(te.format_exception_only(show_group=show_group, colorize=colorize))
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1263, in format_exception_only
yield from [indent + l for l in self._format_syntax_error(stype, colorize=colorize)]
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1456, in _format_syntax_error
msg = self.msg or "<no detail available>"
TypeError: NotImplemented should not be used in a boolean context
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 186, in main
print_exception()
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 278, in print_exception
print_exc(typ, val, tb)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 264, in print_exc
print_exc(type(context), context, context.__traceback__)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 274, in print_exc
lines = get_message_lines(typ, exc, tb)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 240, in get_message_lines
return traceback.format_exception_only(typ, exc)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 181, in format_exception_only
return list(te.format_exception_only(show_group=show_group, colorize=colorize))
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1263, in format_exception_only
yield from [indent + l for l in self._format_syntax_error(stype, colorize=colorize)]
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1456, in _format_syntax_error
msg = self.msg or "<no detail available>"
TypeError: NotImplemented should not be used in a boolean context
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\idlelib\run.py", line 190, in main
traceback.print_exception(type, value, tb, file=sys.__stderr__)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 134, in print_exception
te.print(file=file, chain=chain, colorize=colorize)
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1573, in print
for line in self.format(chain=chain, colorize=colorize):
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1510, in format
yield from _ctx.emit(exc.format_exception_only(colorize=colorize))
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 999, in emit
for text in text_gen:
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1263, in format_exception_only
yield from [indent + l for l in self._format_syntax_error(stype, colorize=colorize)]
File "C:\Users\benja\AppData\Local\Programs\Python\Python314\Lib\traceback.py", line 1456, in _format_syntax_error
msg = self.msg or "<no detail available>"
TypeError: NotImplemented should not be used in a boolean context
================================ RESTART: Shell ================================So, I suggest changing the part of traceback.py code,
msg = self.msg or "<no detail available>"to like this:
if self.msg is None:
msg = "<no detail available>"
else:
msg = self.msgCPython versions tested on:
3.14, 3.15
Operating systems tested on:
Windows
Linked PRs
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytopic-replRelated to the interactive shellRelated to the interactive shelltype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Activity
[-]raise SyntaxError(NotImplemented) restarts IDLE Shell[/-][+]"raise SyntaxError(NotImplemented)" exits REPL and IDLE subprocess[/+]terryjreedy commentedon Jun 28, 2026
This is not just an IDLE issue. The 'raise' works in file input mode but not REPL interaction.
The IDLE execution also exits. IDLE Shell notices this and restarts.
The exit is at least somewhat specific to SyntaxError.
raise Type/Value/Index/RuntimeError(NotImplemented)in IDLE just print the expect traceback. (I don't know why the difference.)The existing code is buggy in that
raise SyntaxError(0)should just print0as the message, just as passing1prints1as the message. The initial fix is also buggy in that it does not replace''. An alternate replacement could be"''".Both
SyntaxError()andSyntaxError(None)result in.msgbeing None. An alternative to replacing None would be to just printNoneas the message. In other words, replacing''with something is the only action really needed.terryjreedy commentedon Oct 19, 2026
About the specificity of the failure for SyntaxError, I wrote "I don't know why the difference." Duh. The line is in _format_syntax_error.
While I still think replacing all falsey values with the string is wrong, it is a different issue. Such an issue needs separate justification and discussion and might have different backports.
terryjreedy commentedon Oct 19, 2026
This is 3.13 IDLE (REPL is the same except for pseudofile name.)
I think that this should be the result after the patch. In other words, treat NotImplemented as truthy, and by extension, anything else without a boolean value (IE, that raises). (Note that True is the default.)