我想在 python raw_input 中分配一个字符串变量

I want to assign a string variable inside python raw_input

---现实---

a = "email@gmail.com"

b = raw_input()
> a            # enter

结果:一个

---想要的答案---

a = "email@gmail.com"

b = raw_input()
> a            # enter

结果:“电子邮件@gmail.com”

当我用它作为输入时,它正常工作,但是当我使用raw_input时,为什么会得到这样的结果?解决方案是什么?

谢谢。

如果你给输入,它被认为是字符串。

您可以使用字典来保存您的 e-mail,然后使用输入字符串作为键来获取值(Python3 代码):

your_dict = {'a': 'email@gmail.com'}
b = input()
print(your_dict[b])
#email@gmail.com

对于玩具问题,只需使用 input()。这相当于 eval(raw_input())。即使您有可能不信任输入,也不要这样做。控制输入​​的任何人都可以在您的程序中执行任意代码。所以这是一个主要的安全漏洞。

为获得更安全的方法,请将您希望访问的所有值放入一个字典中,然后根据您的输入键入该字典。这样做的原因是用户只能 select 来自你给他们的预定义键。

例如

values = {'a': 1, 'b': 2}
key = raw_input()
result = values[key]
print(result)

中途之家可能会使用 globals()locals()globals() returns 模块的全局字典,locals() 将所有局部变量收集到字典中。这将允许用户 select 任何一组名称中的任何名称。因此他们可能 select 您想保密的值。

例如

password = 'foo'
a = 1
b = 2
key = raw_input() # password would be a valid input here
result = vars()[key]
print(result) # so here we would leak the value of password

附带说明一下,您使用的是 Python 2。Python 2 早已过期,不再接收安全更新。理想情况下,所有新项目都应使用 Python 3 的最新版本之一(例如 3.10)。 Python 3只有input(),但它的行为是Python中的raw_input() 2.

您通过 input() 函数收到的内容将是 string.so 您只是要求打印该字符串。 您可以从此处阅读有关 globals() 动态分配变量的更多信息。 How can you dynamically create variables?

您可以像这样使用 globals() 功能。 (对 Python 3 使用 input()。)

a = "email@gmail.com"

print(globals()[input()])

一个

电子邮件@gmail.com