24

我想知道是否有人建议编写向后兼容的 input() 调用来检索文件路径?

在 Python 2.x 中,raw_input 对于像 /path/to/file 这样的输入工作得很好。在这种情况下,对于 3.x,使用输入工作正常,但在 2.x 中由于 eval 行为而抱怨。

一种解决方案是检查 Python 的版本,并根据版本映射input或映射raw_input到新函数:

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

我确信有更好的方法来做到这一点。有人有什么建议吗?

4

4 回答 4

34

由于 Python 2.x 版本input()基本上没有用,您可以简单地通过以下方式覆盖它raw_input

try:
    input = raw_input
except NameError:
    pass

一般来说,我不会尝试同时使用 Python 2.x 和 3.x 的代码,而是以在 2.x 上工作的方式编写代码,并且通过使用2to3脚本。

于 2011-05-03T11:08:24.850 回答
14

现在,许多 Python 教育和培训计划都教授了此代码。

通常一起教:

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

第一行:将 Python 3.xprint()函数导入 Python 2.7,因此print()在两个 Python 版本下的行为相同。如果由于较旧的print "some content"调用而破坏了您的代码,您可以关闭此行。

第二行和第三行:将 Python 2.7 设置raw_input()为,input()以便input()在两个版本的 Python 下都可以毫无问题地使用。如果这是您希望包含在代码中的唯一兼容性修复程序,则可以单独使用它。

from __future__Python.org 网站上有更多关于其他语言兼容性问题的导入。还有一个名为“six”的库,在处理其他问题时可以查找兼容性解决方案。

于 2017-05-18T16:52:51.660 回答
1

你处理它的方式很好。使用该sys模块可能有更多类似的方法,但请记住,如果您的程序对字符串和文件做的不仅仅是琐碎的事情,最好有两个版本的程序而不是向后兼容的 python3 程序.

于 2011-05-03T11:22:25.530 回答
1

您可以导入该功能:

from builtins import input

不幸的是,虽然这种方法需要通过外部依赖pip install future

于 2017-06-12T22:03:52.880 回答