Arnaud Delobelle wrote:

> Here is an extract from the dis module doc [1]
> 
> """
> RAISE_VARARGS(argc)
> Raises an exception. argc indicates the number of parameters to the
> raise statement, ranging from 0 to 3. The handler will find the
> traceback as TOS2, the parameter as TOS1, and the exception as TOS.
> """
> 
> OTOH, looking at PEP 3109:
> 
> """
> In Python 3, the grammar for raise statements will change from [2]
> 
> raise_stmt: 'raise' [test [',' test [',' test]]]
> to
> 
> raise_stmt: 'raise' [test]
> """
> 
> So it seems that RAISE_VARARGS's argument can only be 0 or 1 in Python
> 3, whereas it could be up to 3 in Python 2.  

It can be up to 2 in Python 3,

>>> help("raise")                                                               
>>>                                                                          
The ``raise`` statement                                                         
                                                                         
***********************                                                         
                                                                         
                                                                                
                                                                         
   raise_stmt ::= "raise" [expression ["from" expression]]                      
                                                                         
...

confirmed by a quick look into ceval.c:

        TARGET(RAISE_VARARGS)
            v = w = NULL;
            switch (oparg) {
            case 2:
                v = POP(); /* cause */
            case 1:
                w = POP(); /* exc */
            case 0: /* Fallthrough */
                why = do_raise(w, v);
                break;
            default:
                PyErr_SetString(PyExc_SystemError,
                           "bad RAISE_VARARGS oparg");
                why = WHY_EXCEPTION;
                break;
            }
            break;

> Can anyone confirm that
> this is the case?  In this case, I guess the dis docs need to be
> updated.

Indeed.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to