Backwards-compatible input calls in Python

微笑、不失礼 提交于 2019-11-27 23:28:25

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.

TMWP

This code is taught in many Python education and training programs now.

Usually taught together:

from __future__ import print_function
if hasattr(__builtins__, 'raw_input'):
    input = raw_input

First line: imports the Python 3.x print() function into Python 2.7 so print() behaves the same under both versions of Python. If this breaks your code due to older print "some content" calls, you can leave this line off.

Second and third lines: sets Python 2.7 raw_input() to input() so input() can be used under both versions of Python without problems. This can be used all by itself if this is the only compatibility fix you wish to include in your code.

There are more from __future__ imports available on the Python.org site for other language compatibility issues. There is also a library called "six" that can be looked up for compatibility solutions when dealing with other issues.

The way you are handling it is just fine. There are probably more similar ways using the sys module, but just in keep in mind that if you are program is doing something more than trivial with strings and files, it is better to have two versions of your program instead of having a backwards compatible python3 program.

My preference is to import the function:

from builtins import input

Although, you will have to install the dependency:

pip install future

Unfortunately this dependency will not be noticed by the pipreqs tool. So if you are creating requirements.txt files you'll have to add the future library in manually.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!