New submission from Ned Batchelder <n...@nedbatchelder.com>:
The way trace function reports return-finally has changed in Python 3.9.0a2. I don't know if this change is intentional or not. (BTW: I want to put a 3.9regression keyword on this, but it doesn't exist.) Consider this code: --- 8< ---------------------------------------------------- import linecache, sys def trace(frame, event, arg): lineno = frame.f_lineno print("{} {}: {}".format(event[:4], lineno, linecache.getline(__file__, lineno).rstrip())) return trace print(sys.version) sys.settrace(trace) a = [] def finally_return(): try: return 14 finally: a.append(16) assert finally_return() == 14 assert a == [16] --- 8< ---------------------------------------------------- (My habit is to use line numbers in the lines themselves to help keep things straight.) In Python 3.7 (and before), the last traces are line 14, line 16, return 16. In Python 3.8, the last traces are line 14, line 16, line 14, return 14. In Python 3.9a1, the traces are the same as 3.8. In Python 3.9a2, the traces are now line 14, line 16, line 14, line 16, return 16. This doesn't make sense to me: why does it bounce back and forth? Full output from different versions of Python: % /usr/local/pythonz/pythons/CPython-3.7.1/bin/python3.7 bpo.py 3.7.1 (default, Oct 20 2018, 18:25:32) [Clang 10.0.0 (clang-1000.11.45.2)] call 12: def finally_return(): line 13: try: line 14: return 14 line 16: a.append(16) retu 16: a.append(16) % /usr/local/pythonz/pythons/CPython-3.8.1/bin/python3.8 bpo.py 3.8.1 (default, Dec 19 2019, 08:38:38) [Clang 10.0.0 (clang-1000.10.44.4)] call 12: def finally_return(): line 13: try: line 14: return 14 line 16: a.append(16) line 14: return 14 retu 14: return 14 % /usr/local/pythonz/pythons/CPython-3.9.0a1/bin/python3.9 bpo.py 3.9.0a1 (default, Nov 20 2019, 18:52:14) [Clang 10.0.0 (clang-1000.10.44.4)] call 12: def finally_return(): line 13: try: line 14: return 14 line 16: a.append(16) line 14: return 14 retu 14: return 14 % /usr/local/pythonz/pythons/CPython-3.9.0a2/bin/python3.9 bpo.py 3.9.0a2 (default, Dec 19 2019, 08:42:29) [Clang 10.0.0 (clang-1000.10.44.4)] call 12: def finally_return(): line 13: try: line 14: return 14 line 16: a.append(16) line 14: return 14 line 16: a.append(16) retu 16: a.append(16) ---------- messages: 358771 nosy: nedbat priority: normal severity: normal status: open title: Python 3.9.0a2 changed how finally/return is traced type: behavior versions: Python 3.9 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue39114> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com