Description: Porting to Python 2.3
Keywords: whatsnew23

# 21 Porting to Python 2.3

This section lists previously described changes that may require changes to your code:

- `yield` is now always a keyword; if it's used as a variable name in your code, a different name must be chosen.

- For strings X and Y, `X in Y` now works if X is more than one character long.

- The `int()` type constructor will now return a long integer instead of raising an `OverflowError` when a string or floating-point number is too large to fit into an integer.

- If you have Unicode strings that contain 8-bit characters, you must declare the file's encoding (UTF-8, Latin-1, or whatever) by adding a comment to the top of the file. See section 3 for more information.

- Calling Tcl methods through `_tkinter` no longer returns only strings. Instead, if Tcl returns other objects those objects are converted to their Python equivalent, if one exists, or wrapped with a `_tkinter.Tcl_Obj` object if no Python equivalent exists.

- Large octal and hex literals such as `0xffffffff` now trigger a `FutureWarning`. Currently they're stored as 32-bit numbers and result in a negative value, but in Python 2.4 they'll become positive long integers.

  There are a few ways to fix this warning. If you really need a positive number, just add an "`L`" to the end of the literal. If you're trying to get a 32-bit integer with low bits set and have previously used an expression such as `(1 « 31)`, it's probably clearest to start with all bits set and clear the desired upper bits. For example, to clear just the top bit (bit 31), you could write `0xffffffffL &~(1L«31)`.

- You can no longer disable assertions by assigning to `__debug__`.

- The Distutils `setup()` function has gained various new keyword arguments such as depends. Old versions of the Distutils will abort if passed unknown keywords. A solution is to check for the presence of the new `get_distutil_options()` function in your setup.py and only uses the new keywords with a version of the Distutils that supports them:

      from distutils import core

      kw = {'sources': 'foo.c', ...}
      if hasattr(core, 'get_distutil_options'):
          kw['depends'] = ['foo.h']
      ext = Extension(**kw)

- Using `None` as a variable name will now result in a `SyntaxWarning` warning.

- Names of extension types defined by the modules included with Python now contain the module and a "`.`" in front of the type name.