skip to navigation
skip to content

Python Wiki

Python Insider Blog

Python 2 or 3?

Help Fund Python

[Python resources in languages other than English]

Non-English Resources

Add an event to this calendar.

Times are shown in UTC/GMT.

Add an event to this calendar.

PEP: 5
Title: Guidelines for Language Evolution
Version: af47d5be4850
Last-Modified:  2013-08-20 16:03:37 -0400 (Tue, 20 Aug 2013)
Author: Paul Prescod <paul at>
Status: Active
Type: Process
Created: 26-Oct-2000


    In the natural evolution of programming languages it is sometimes
    necessary to make changes that modify the behavior of older
    programs.  This PEP proposes a policy for implementing these
    changes in a manner respectful of the installed base of Python

Implementation Details

    Implementation of this PEP requires the addition of a formal
    warning and deprecation facility that will be described in another


    These guidelines apply to future versions of Python that introduce
    backward-incompatible behavior.  Backward incompatible behavior is
    a major deviation in Python interpretation from an earlier
    behavior described in the standard Python documentation.  Removal
    of a feature also constitutes a change of behavior.

    This PEP does not replace or preclude other compatibility
    strategies such as dynamic loading of backwards-compatible
    parsers.  On the other hand, if execution of "old code" requires a
    special switch or pragma then that is indeed a change of behavior
    from the point of view of the user and that change should be
    implemented according to these guidelines.

    In general, common sense must prevail in the implementation of
    these guidelines.  For instance changing "sys.copyright" does not
    constitute a backwards-incompatible change of behavior!

Steps For Introducing Backwards-Incompatible Features

    1. Propose backwards-incompatible behavior in a PEP.  The PEP must
       include a section on backwards compatibility that describes in
       detail a plan to complete the remainder of these steps.

    2. Once the PEP is accepted as a productive direction, implement
       an alternate way to accomplish the task previously provided by
       the feature that is being removed or changed.  For instance if
       the addition operator were scheduled for removal, a new version
       of Python could implement an "add()" built-in function.

    3. Formally deprecate the obsolete construct in the Python

    4. Add an optional warning mode to the parser that will inform
       users when the deprecated construct is used.  In other words,
       all programs that will behave differently in the future must
       trigger warnings in this mode.  Compile-time warnings are
       preferable to runtime warnings.  The warning messages should
       steer people from the deprecated construct to the alternative

    5. There must be at least a one-year transition period between the
       release of the transitional version of Python and the release
       of the backwards incompatible version.  Users will have at
       least a year to test their programs and migrate them from use
       of the deprecated construct to the alternative one.