Closed
Description
Bug report
Bug description:
The f-string f'{1:{name}}'
has a extra Constant(value='')
in the format_spec part in 3.12, which is not part of the AST in 3.11. This has also an effect on the generated bytecode.
import ast import dis print(ast.dump(ast.parse("f'{1:{name}}'"),indent=2)) dis.dis(compile("f'{1:{name}}'","<string>","exec"))
output (Python 3.12.0):
Module( body=[ Expr( value=JoinedStr( values=[ FormattedValue( value=Constant(value=1), conversion=-1, format_spec=JoinedStr( values=[ FormattedValue( value=Name(id='name', ctx=Load()), conversion=-1), Constant(value='')]))]))], # <-- extra Constant type_ignores=[]) 0 0 RESUME 0 1 2 LOAD_CONST 0 (1) 4 LOAD_NAME 0 (name) 6 FORMAT_VALUE 0 8 LOAD_CONST 1 ('') # <-- extra LOAD_CONST 10 BUILD_STRING 2 # <-- extra BUILD_STRING 12 FORMAT_VALUE 4 (with format) 14 POP_TOP 16 RETURN_CONST 2 (None)
output (Python 3.11.3):
Module( body=[ Expr( value=JoinedStr( values=[ FormattedValue( value=Constant(value=1), conversion=-1, format_spec=JoinedStr( values=[ FormattedValue( value=Name(id='name', ctx=Load()), conversion=-1)]))]))], type_ignores=[]) 0 0 RESUME 0 1 2 LOAD_CONST 0 (1) 4 LOAD_NAME 0 (name) 6 FORMAT_VALUE 0 8 FORMAT_VALUE 4 (with format) 10 POP_TOP 12 LOAD_CONST 1 (None) 14 RETURN_VALUE
CPython versions tested on:
3.12
Operating systems tested on:
Linux