[Python-Dev] Can Python implementations reject semantically invalid expressions? (original) (raw)

Mark Dickinson dickinsm at gmail.com
Fri Jul 2 09:29:05 CEST 2010


On Fri, Jul 2, 2010 at 8:22 AM, Mark Dickinson <dickinsm at gmail.com> wrote:

On Fri, Jul 2, 2010 at 7:55 AM, Craig Citro <craigcitro at gmail.com> wrote:

dis.dis("raise TypeError()")  0 <114>           26977  3 <115>            8293  6 IMPORTSTAR  7 SETUPEXCEPT    25968 (to 25978) 10 <69> 11 <114>           28530 14 <114>           10536 dis.dis("1 + '1'")  0 <49>  1 SLICE+2  2 STORESLICE+3  3 SLICE+2  4 <39>  5 <49>  6 <39> Whoa.  That's very peculiar looking bytecode.  Is dis.dis behaving as it should here?

Ah. I see. It looks like the string "raise TypeError()" is being interpreted directly as Python bytecode, with no intermediate compilation. I don't think this is what you intended. Try:

dis.dis(compile("raise TypeError", "", "exec")) 1 0 LOAD_NAME 0 (TypeError) 3 RAISE_VARARGS 1 6 LOAD_CONST 0 (None) 9 RETURN_VALUE dis.dis(compile("1 + '1'", "", "exec")) 1 0 LOAD_CONST 0 (1) 3 LOAD_CONST 1 ('1') 6 BINARY_ADD 7 POP_TOP 8 LOAD_CONST 2 (None) 11 RETURN_VALUE

Mark



More information about the Python-Dev mailing list