あなたが安全ににをast.literal_eval
を使用することができますが、ユーザからのリテラルの任意のpythonを評価:
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'を入れます。あなたはintsの文字列などにしたい場合は、コースの種類を処理する必要があります – Pythonista
誰か必然的に 'eval'を提案するつもりです。これは悪い考えです。ユーザーが何か悪意のある操作をしたときに、ユーザーが何か間違ったことをした場合には厄介な結果をもたらし、Python構文に直接マップしない入力を解析する重要な作業を回避します。 – user2357112
'ast.literal_eval' – kindall