如何在没有eval

时间:2015-12-12 23:11:48

标签: python string python-3.x

我尝试使用input来获取元组的值。但是,由于input将值设置为字符串,因此我也尝试 unstring 。我发现eval可以用于此目的,但它应该是distrusted.虽然这不会成为问题,只要我私下使用代码,如果我要公开发布它我想尽可能使用最好的代码。

那么,是否有另一种方法可以解决Python 3中的tuple

这是我目前正在做的事情:

>>> a = input("What is the value? ")
What is the value? (3,4)
>>> a
'(3,4)'
>>> eval(a)
(3, 4)

3 个答案:

答案 0 :(得分:4)

使用eval的安全版本ast.literal_eval,该版本的设计完全符合您的目标:

from ast import literal_eval
tup = literal_eval(a)

答案 1 :(得分:2)

我会这样做:

>>> inp = input()
'(3,4)'
>>> tuple(map(int, inp.strip()[1:-1].split(',')))
(3, 4)

其中strip将确保领先或尾随空白不会毁了你的一天。

答案 2 :(得分:1)

简单,您不要求用户输入元组。相反,你这样做:

x = input("Enter x value: ")
y = input("Enter y value: ")

data = (
    int(x),
    int(y)
)

print( 
    repr(data)
)

--output:--
(10, 3)