Issue42652
This issue tracker has been migrated to GitHub,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2020-12-16 08:48 by xxm, last changed 2022-04-11 14:59 by admin. This issue is now closed.
Messages (5) | |||
---|---|---|---|
msg383125 - (view) | Author: Xinmeng Xia (xxm) | Date: 2020-12-16 08:48 | |
Considering the following two program,running the program 1 will get expected output: RecursionError program 1 =========================== import traceback def foo(): try: 1/0 except Exception as e: traceback.print_exc() finally: a = 1 foo() foo() ========================== ----------------------------------------------------------------------------------- ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 12, in <module> File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10, in foo foo() File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10, in foo ... foo() File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10, in foo foo() File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 7, in foo traceback.print_exc() File "/usr/lib/python3.5/traceback.py", line 159, in print_exc print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain) File "/usr/lib/python3.5/traceback.py", line 100, in print_exception type(value), value, tb, limit=limit).format(chain=chain): File "/usr/lib/python3.5/traceback.py", line 474, in __init__ capture_locals=capture_locals) File "/usr/lib/python3.5/traceback.py", line 358, in extract f.line File "/usr/lib/python3.5/traceback.py", line 282, in line self._line = linecache.getline(self.filename, self.lineno).strip() File "/usr/lib/python3.5/linecache.py", line 16, in getline lines = getlines(filename, module_globals) File "/usr/lib/python3.5/linecache.py", line 43, in getlines if len(entry) != 1: RecursionError: maximum recursion depth exceeded in comparison ------------------------------------------------------------------------ However when moving foo() into finally clause, the interpreter crashes. program 2 ========================== import traceback def foo(): try: 1/0 except Exception as e: traceback.print_exc() finally: a = 1 foo() foo() ========================== ----------------------------------------------------------------------------- File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10 in foo Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 ZeroDivisionError: division by zero During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 7, in foo traceback.print_exc() File "/usr/lib/python3.5/traceback.py", line 159, in print_exc print_exception(*sys.exc_info(), limit=limit, file=file, chain=chain) File "/usr/lib/python3.5/traceback.py", line 100, in print_exception type(value), value, tb, limit=limit).format(chain=chain): File "/usr/lib/python3.5/traceback.py", line 474, in __init__ capture_locals=capture_locals) File "/usr/lib/python3.5/traceback.py", line 358, in extract f.line File "/usr/lib/python3.5/traceback.py", line 282, in line self._line = linecache.getline(self.filename, self.lineno).strip() File "/usr/lib/python3.5/linecache.py", line 16, in getline lines = getlines(filename, module_globals) File "/usr/lib/python3.5/linecache.py", line 43, in getlines if len(entry) != 1: RecursionError: maximum recursion depth exceeded in comparison During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 5, in foo 1/0 File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10 in foo File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10 in foo File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10 in foo ... File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10 in foo File "/home/xxm/Desktop/nameChanging/myerror/test1.py", line 10 in foo ... Aborted (core dumped) ------------------------------------------------------------------------- |
|||
msg383250 - (view) | Author: Ronald Oussoren (ronaldoussoren) * ![]() |
Date: 2020-12-17 15:36 | |
This might be related to #42500 |
|||
msg383252 - (view) | Author: Xinmeng Xia (xxm) | Date: 2020-12-17 16:33 | |
In issue #42500, crashes is resulted by recursion and try-except. Program like following will crash the interpreter. ===== def foo(): try: 1/0 except: pass foo() foo() ===== However with traceback module, program will no longer crash the interpreter. A recursive Error is returned as expected. ===== import traceback def foo(): try: 1/0 except: traceback.print_exc() foo() foo() ===== But it is still crash the interpreter in finally clause. I think this might be a new but and it is different from #42500. It should be related to traceback module, finally clause and recursion. what do you think? |
|||
msg383273 - (view) | Author: Steve Stagg (stestagg) | Date: 2020-12-17 22:14 | |
This was also fixed by bpo-42500, in commit 4e7a69bdb6 === user@obsidian ~/t/f/cpython ((93a0ef76…))> git checkout 4e7a69bd^ HEAD is now at 93a0ef7647 Correct return type in Modules/_ssl.c::sslmodule_legacy (GH-23609) + make distclean + CFLAGS=-O0 + ./configure --prefix=/home/user/prefix --exec-prefix=/home/user/prefix --cache-file=../config.cache --with-pydebug --without-ensurepip + CFLAGS=-O0 + make -j8 install /home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+ __import__(pkg_name) /home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+ __import__(pkg_name) ++ realpath /home/user/prefix/include/python3.10d/ + INCLUDE_DIR=/home/user/prefix/include/python3.10d + set +e + PYTHONHOME=/home/user/prefix + /home/user/prefix/bin/python3 ../test.py Traceback (most recent call last): File "/home/user/cpython/../test.py", line 5, in foo 1/0 ZeroDivisionError: division by zero Traceback (most recent call last): File "/home/user/cpython/../test.py", line 5, in foo 1/0 ZeroDivisionError: division by zero ... File "/home/user/cpython/../test.py", line 10 in foo File "/home/user/cpython/../test.py", line 10 in foo ... ../test.sh: line 33: 384713 Aborted (core dumped) PYTHONHOME=$PREFIX $EPREFIX/bin/python3 ../test.py + RESULT=134 + [[ 134 -eq 139 ]] + [[ 134 -eq 134 ]] + exit 1 ==== user@obsidian ~/t/f/cpython ((93a0ef76…)) [1]> git checkout 4e7a69bd Previous HEAD position was 93a0ef7647 Correct return type in Modules/_ssl.c::sslmodule_legacy (GH-23609) HEAD is now at 4e7a69bdb6 bpo-42500: Fix recursion in or after except (GH-23568) ==== user@obsidian ~/t/f/cpython ((4e7a69bd…))> ../test.sh + make distclean + CFLAGS=-O0 + ./configure --prefix=/home/user/prefix --exec-prefix=/home/user/prefix --cache-file=../config.cache --with-pydebug --without-ensurepip + CFLAGS=-O0 + make -j8 install /home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+ __import__(pkg_name) /home/user/cpython/Lib/runpy.py:111: PendingDeprecationWarning: lib2to3 package is deprecated and may not be able to parse Python 3.10+ __import__(pkg_name) + /home/user/prefix/bin/python3 ../test.py Traceback (most recent call last): File "/home/user/cpython/../test.py", line 5, in foo 1/0 ... File "/home/user/cpython/../test.py", line 10, in foo foo() File "/home/user/cpython/../test.py", line 10, in foo foo() [Previous line repeated 996 more times] RecursionError: maximum recursion depth exceeded + RESULT=1 + [[ 1 -eq 139 ]] + [[ 1 -eq 134 ]] + exit 0 |
|||
msg383574 - (view) | Author: Xinmeng Xia (xxm) | Date: 2020-12-22 08:24 | |
Thanks for fixing this, looking forward to the new version. Could you please kindly change the resolution into fixed and close this report? |
History | |||
---|---|---|---|
Date | User | Action | Args |
2022-04-11 14:59:39 | admin | set | github: 86818 |
2020-12-22 08:32:50 | ronaldoussoren | set | status: open -> closed superseder: crash with unbounded recursion in except statement resolution: fixed stage: resolved |
2020-12-22 08:24:55 | xxm | set | messages: + msg383574 |
2020-12-17 22:14:21 | stestagg | set | nosy:
+ stestagg messages: + msg383273 |
2020-12-17 16:33:57 | xxm | set | messages: + msg383252 |
2020-12-17 15:36:21 | ronaldoussoren | set | nosy:
+ ronaldoussoren messages: + msg383250 |
2020-12-16 08:48:19 | xxm | create |