Quantcast
Viewing latest article 2
Browse Latest Browse All 2

What is the `ExceptionTable` in the output of `dis`?

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.


Viewing latest article 2
Browse Latest Browse All 2

Trending Articles