在2.6中,如果我需要接受允许百分号的输入(例如“foo%bar”),我使用raw_input()
按预期工作。
在3.0中,input()
完成相同的操作(使用raw_input()离开了建筑物。)
作为练习,我希望我能有一个可以兼容2.6和3.0的向后兼容版本。
当我在2.6中使用input()并输入“foo%bar”时,会返回以下错误:
File "<string>", line 1, in <module>
NameError: name "foo" is not defined
......这是预期的。
无论如何要完成接受包含在2.6和3.0中都有效的百分号的输入?
THX。
答案 0 :(得分:2)
您可以使用sys.version_info
来检测正在运行的Python版本。
import sys
if sys.version_info[0] == 2:
input = raw_input
# Now you can use
input()
或者,如果您不想覆盖Python 2.X的内置input
函数,则可以编写
import sys
if sys.version_info[0] == 2:
my_input = raw_input
else:
my_input = input
# Now you can use
my_input()
虽然在我的第一个代码示例中,原始内置input
始终可用__builtins__.input
。
答案 1 :(得分:2)
虽然不是一个优雅(而且相当难看)的解决方案,但我会做这样的事情:
try:
input = raw_input
except:
pass