In python3.13
, when I try to disassemble [i for i in range(10)]
, the result is as below:
>>> import dis>>> >>> dis.dis('[i for i in range(10)]') 0 RESUME 0 1 LOAD_NAME 0 (range) PUSH_NULL LOAD_CONST 0 (10) CALL 1 GET_ITER LOAD_FAST_AND_CLEAR 0 (i) SWAP 2 L1: BUILD_LIST 0 SWAP 2 L2: FOR_ITER 4 (to L3) STORE_FAST_LOAD_FAST 0 (i, i) LIST_APPEND 2 JUMP_BACKWARD 6 (to L2) L3: END_FOR L4: SWAP 2 STORE_FAST 0 (i) RETURN_VALUE -- L5: SWAP 2 POP_TOP 1 SWAP 2 STORE_FAST 0 (i) RERAISE 0ExceptionTable: L1 to L4 -> L5 [2]
At the end of the output, there's something ExceptionTable
. It does not exist in the previous versions of python.
Python 3.10.0b1 (default, May 4 2021, 00:00:00) [GCC 10.2.1 20201125 (Red Hat 10.2.1-9)] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import dis>>> >>> dis.dis('[i for i in range(10)]') 1 0 LOAD_CONST 0 (<code object <listcomp> at 0x7f3d412503a0, file "<dis>", line 1>) 2 LOAD_CONST 1 ('<listcomp>') 4 MAKE_FUNCTION 0 6 LOAD_NAME 0 (range) 8 LOAD_CONST 2 (10) 10 CALL_FUNCTION 1 12 GET_ITER 14 CALL_FUNCTION 1 16 RETURN_VALUEDisassembly of <code object <listcomp> at 0x7f3d412503a0, file "<dis>", line 1>: 1 0 BUILD_LIST 0 2 LOAD_FAST 0 (.0)>> 4 FOR_ITER 4 (to 14) 6 STORE_FAST 1 (i) 8 LOAD_FAST 1 (i) 10 LIST_APPEND 2 12 JUMP_ABSOLUTE 2 (to 4)>> 14 RETURN_VALUE
I can't understand what that means, also I couldn't find any document for this.