Closed
Description
Bug report
Bug description:
When having return-type annotations on a function:
def foo() -> int: return 0
and trying to establish a breakpoint on the name of the function:
(Pdb) break foo
PDB raises the following exception (snipped):
Traceback (most recent call last): File "/usr/lib/python3.13/pdb.py", line 1137, in do_break lineno = int(arg) ValueError: invalid literal for int() with base 10: 'foo' During handling of the above exception, another exception occurred: ... SyntaxError: 'return' outside function Uncaught exception. Entering post mortem debugging Running 'cont' or 'step' will restart the program > /usr/lib/python3.13/dis.py(76)_try_compile() -> return compile(source, name, 'exec')
This also happens with temporary breakpoins tbreak
. This was tested using Python versions from Debian official repositories. The failure appears in 3.13.0 and was not present in 3.12.6.
Analyzing with @asottile they point out that the following lines: Lib/pdb.py:121, Lib/pdb.py:141 may be causing this behavior. They also provided further probing of the issue:
(Pdb) p compile(funcdef, filename, 'exec').co_consts ('return', <code object main at 0x102b73020, file "/private/tmp/y/t3.py", line 1>, None) (Pdb) p funcdef 'def main() -> int:\n pass\n'
I think it's expecting to find the code object there.
it's due to the disassembly
(Pdb) dis.dis(compile('def f() -> int: pass', filename, 'exec')) 0 RESUME 0 1 LOAD_CONST 0 ('return') LOAD_NAME 0 (int) BUILD_TUPLE 2 LOAD_CONST 1 (<code object f at 0x102b73020, file "/private/tmp/y/t3.py", line 1>) MAKE_FUNCTION SET_FUNCTION_ATTRIBUTE 4 (annotations) STORE_NAME 1 (f) RETURN_CONST 2 (None) Disassembly of <code object f at 0x102b73020, file "/private/tmp/y/t3.py", line 1>: 1 RESUME 0 RETURN_CONST 0 (None)
CPython versions tested on:
3.13
Operating systems tested on:
Linux