Next step after pychecker

Skip Montanaro skip at pobox.com
Tue Feb 1 22:11:32 EST 2005


    Francis> "Every well-formed expression of the language can be assigned a
    Francis> type that can be deduced from the constituents of the
    Francis> expression alone." Bird and Wadler, Introduction to Functional
    Francis> Programming, 1988

    Francis> This is certainly not the case for Python since one and the
    Francis> same variable can have different types depending upon the
    Francis> execution context. Example :

    Francis> 1- if a is None:
    Francis> 2-   b = 1
    Francis> 3- else:
    Francis> 4-   b = "Phew"
    Francis> 5- b = b + 1

    Francis> One cannot statically determine the type of b by examining the
    Francis> line 5- alone.

Do you have an example using a correct code fragment?  It makes no sense to
infer types in code that would clearly raise runtime errors:

    >>> "Phew" + 1
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
    TypeError: cannot concatenate 'str' and 'int' objects

Also, note that the type assigned to an expression may be nothing more than
"object".  Clearly that wouldn't be very helpful when trying to write an
optimizing compiler, but it is a valid type.

Skip



More information about the Python-list mailing list