"raise SyntaxError(NotImplemented)" exits REPL and IDLE subprocess
未关闭
@terryjreedy 已经在做这个了。
开始于 2026年6月28日。
stdlib
topic-repl
type-bug
- 主要语言
- Python
- 星标
- 77.2k
- 派生
- 35.9k
- PR 合并指标
- PR 指标待抓取
描述
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.msg
CPython versions tested on:
3.14, 3.15
Operating systems tested on:
Windows
Linked PRs
- gh-152495
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
评估
这个 Issue 还没有评估数据。