以下代码在 Python 3.6 中记录了一个错误并调用自身,导致堆栈溢出并最终崩溃核心。
>>> import logging
>>> def rec():
... logging.error("foo")
... rec()
>>> rec()
[1] 101641 abort (core dumped) python3
顺便说一句,这不会导致Python 2.7崩溃。
以下是在Python 3.6中收到的错误信息(已压缩):
ERROR:root:foo
...
--- Logging error ---
Traceback (most recent call last):
...
RecursionError: maximum recursion depth exceeded in comparison
...
Fatal Python error: Cannot recover from stack overflow.
...
[1] 101641 abort (core dumped) python3
Python 2.7:
RuntimeError: maximum recursion depth exceeded
但是在Python 2.7中没有核心转储。
顺便说一下,如果日志级别设置为logging.ERROR,则Python 3.6中出现的上述错误也会发挥作用。其他日志级别同样如此。
更新:我已经记录了一个问题来跟进Python社区issue。