在python27的输入中使用变量会因语法问题而失败

2024-10-03 17:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码,在py 27和36中都可以使用:

all_config_msgs = ['Okta App URL. E.g https://acme.okta.com/home/amazon_aws/b07384d113edec49eaa6/123: ','Organization username. E.g jane.doe@acme.com: ']
config_details = []
for config_msg in all_config_msgs:
    config_details.append(input(config_msg))

在py 36和27中,我得到输入提示:

Okta App URL. E.g https://acme.okta.com/home/amazon_aws/b07384d113edec49eaa6/123:

  • 在py 36中,我说:

任何回复

它成功地接受了

  • 在py 27中,我说:

任何回复

失败的原因是

config_details.append(input(config_msg))
File "<string>", line 1
https://acme.okta.com/home/amazon_aws/b07384d113edec49eaa6/123
     ^
SyntaxError: invalid syntax

仅供参考-在py 27中,如果我将响应设置为“any\u reply” 但是我需要有一种不用双引号的回答方式。你知道吗

我知道在py27中,input是一个eval,但是有什么好方法可以让input提示符作为一个变量而不出现上述错误呢。你知道吗


Tags: pyhttpscomawsconfigamazonhomeinput
3条回答

你可以用 six library用于解决兼容性问题

在Python2.7上,应该改用raw_input。你知道吗

如果您想支持多个版本的Python,您可以创建自己的函数,该函数将同时适用于Python 2和3:

def my_input():
    try:
        return raw_input()
    except NameError:
        return input()

您还可以利用six库来解决兼容性问题:

from six.move import input

在python2中使用raw_input,在python3中使用input。你知道吗

丹尼斯的回答是正确的。可以有条件地使用函数。这在Python中是一种非常常见的模式,特别是当您关心跨版本兼容性时。你知道吗

try:
    my_input = raw_input
except NameError:
    my_input = input

all_config_msgs = ['Okta App URL. E.g https://acme.okta.com/home/amazon_aws/b07384d113edec49eaa6/123: ','Organization username. E.g jane.doe@acme.com: ']
config_details = []
for config_msg in all_config_msgs:
    config_details.append(my_input(config_msg))

在Python2.7和3.5中进行了测试和工作,但它也适用于您的版本。你知道吗

另一个有点争议的选择是,因为有些人对更改全局名称非常奇怪,只需强制执行原始输入,或者定义它:

try:
    _ = raw_input
except NameError:
    raw_input = input

相关问题 更多 >