Search code examples
pythoninputpython-3.xraw-input

Backwards-compatible input calls in Python


I was wondering if anyone has suggestions for writing a backwards-compatible input() call for retrieving a filepath?

In Python 2.x, raw_input worked fine for input like /path/to/file. Using input works fine in this case for 3.x, but complains in 2.x because of the eval behavior.

One solution is to check the version of Python and, based on the version, map either input or raw_input to a new function:

if sys.version_info[0] >= 3:
    get_input = input
else:
    get_input = raw_input

I'm sure there is a better way to do this though. Anyone have any suggestions?


Solution

  • Since the Python 2.x version of input() is essentially useless, you can simply overwrite it by raw_input:

    try:
        input = raw_input
    except NameError:
        pass
    

    In general, I would not try to aim at code that works with both, Python 2.x and 3.x, but rather write your code in a way that it works on 2.x and you get a working 3.x version by using the 2to3 script.