通常不应在用户输入上使用eval 。有人可以键入一个将评估为恶作剧的语句。
出于同样的原因,您应该避免使用input(),因为它等同于eval(raw_input())
也可能导致恶作剧——有意或无意。
但是,您可以使用ast.literal_eval安全地将用户输入的 Python 解释为 Python 数据结构:
>>> import ast
>>> ast.literal_eval(raw_input('Type Python input: '))
Type Python input: 1,2,3
(1, 2, 3)
>>> ast.literal_eval(raw_input('Type Python input: '))
Type Python input: [1,2,3]
[1, 2, 3]
>>> ast.literal_eval(raw_input('Type Python input: '))
Type Python input: 123
123
>>> ast.literal_eval(raw_input('type a number: '))
type a number: 0xab
171
(在每种情况下,后面的第一行>>> Type Python input:
都是我在raw_input()
如果你想分开数字,你可以这样做:
>>> [int(c) for c in raw_input() if c in '1234567890']
1234
[1, 2, 3, 4]
>>> [int(c) for c in raw_input() if c in '1234567890']
123a45
[1, 2, 3, 4, 5]
请注意,非数字已被过滤。