如何实现同时兼容Python 2.x和3.x的输入功能?
解决Python 2/3兼容的输入问题
嘿,我来帮你搞定这个Python跨版本输入的麻烦!首先得搞清楚问题的根源:
- 在Python 2里,
input()会把用户输入的内容当作Python表达式执行,所以你输入test时,它会去找名为test的变量,找不到就报NameError;而真正用来获取纯字符串输入的是raw_input()。 - 在Python 3里,
input()直接替代了Python 2的raw_input(),就是用来获取纯字符串的。
你之前尝试的'"' + input('input: ') + '"'方法没用,是因为Python 2里的input()会先执行你输入的内容,还没到拼接引号的步骤就已经报错了。
下面给你两种简单可靠的兼容方案:
方案1:通过版本判断定义兼容的input函数
直接在脚本开头加这段代码,之后就可以统一用input()获取字符串了:
import sys if sys.version_info[0] == 2: input = raw_input else: input = input
方案2:用try-except捕获NameError(更简洁)
这种方式不用判断版本,直接利用Python 3中不存在raw_input的特性:
try: # Python 2中存在raw_input,把input替换成它 input = raw_input except NameError: # Python 3中没有raw_input,什么都不用做,保持input原样 pass
测试效果
加了上面任意一段代码后,在Python 2里运行:
>>> a = input('Input: ') Input: test >>> a 'test'
完全不用手动加引号,就能正常获取输入的字符串,Python 3里的使用方式和原来一样,完美兼容两个版本!
内容的提问来源于stack exchange,提问作者simplycoding




