可以使用ast.literal_eval
到安全評價來自用戶的字面任何蟒蛇:
import ast
data = ast.literal_eval(input("enter a python literal:"))
print(type(data),data)
這可以讓你輸入各種事情:
enter a python literal:[1,2,3]
<class 'list'> [1, 2, 3]
enter a python literal:(3,2,1)
<class 'tuple'> (3, 2, 1)
enter a python literal:"hello"
<class 'str'> hello
enter a python literal:3.4
<class 'float'> 3.4
#this one is *extremely* malicious when put in eval()
enter a python literal:open(__file__,"w").close()
Traceback (most recent call last):
...
ValueError: malformed node or string: <_ast.Name object at 0x1056b4f98>
# but ast.literal_eval is safe with user input like this.
雖然你可能也只是split
通過逗號得到的數據列表:
data = input("enter some values seperated by ,s: ").split(",")
這會給你一個列表:
enter some values seperated by ,s: 1,2,3
<class 'list'> ['1', '2', '3']
他們輸入由',''或其他分隔符分隔的項目,您可以使用'split'作爲一個選項。你可以爲元組做同樣的事情,但只需將'split'放入'tuple'中即可。如果你想讓它們成爲字符串等,你將不得不處理類型的課程。 – Pythonista
有人不可避免地要推薦'eval'。這是一個壞主意;當用戶做出某些惡意的事情時,用戶做了一些錯誤的事情並且可能導致災難性的結果,並且它避免了學習如何解析不直接映射到Python語法的輸入的重要任務。 – user2357112
'ast.literal_eval' – kindall