2015-04-16 58 views
3

我試圖把用戶輸入的字典和使用下面的代碼在屏幕上顯示它的內容如何利用用戶輸入字典,並顯示其在Python

import ast 
a = input("Please enter a dictionary: ") 
d = ast.literal_eval(a) 
print d 
but this error is occuring 

    File "x.py", line 3, in <module> 
    d = ast.literal_eval(a) 
    File "/usr/lib64/python2.6/ast.py", line 68, in literal_eval 
    return _convert(node_or_string) 
    File "/usr/lib64/python2.6/ast.py", line 67, in _convert 
    raise ValueError('malformed string') 
ValueError: malformed string 
+0

發佈您通過的輸入。 –

+1

輸入:{'a':1,'b':2} –

+0

它適用於我.. –

回答

0

我編輯的代碼檢查的差異。

import ast 
a = input('Please enter a dictionary:') 
d = ast.literal_eval(str(a)) 
print d 
2

ast.literal_eval用於將字符串轉換成字典對象,從我的猜測你插入{'a':1,'b':1}(字典類型),然後試圖使用ast.literal_eval。當你將字典傳遞給接受字符串的函數時,它會發生錯誤)。如果你想利用字典作爲字符串,然後使用 「{ 'A':1, 'B':1}」

代碼

>>> import ast 
>>> a = input("Please enter a dictionary: ") 
Please enter a dictionary: {'a':1,'b':2} 
>>> d = ast.literal_eval(a) 

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    d = ast.literal_eval(a) 
    File "/usr/lib/python2.7/ast.py", line 80, in literal_eval 
    return _convert(node_or_string) 
    File "/usr/lib/python2.7/ast.py", line 79, in _convert 
    raise ValueError('malformed string') 
ValueError: malformed string 

>>> a = input("Please enter a dictionary: ") 
Please enter a dictionary: "{'a':1,'b':2}" 
>>> a 
"{'a':1,'b':2}" 
>>> d = ast.literal_eval(a) 
>>> d 
{'a': 1, 'b': 2} 
3

只是轉換到raw_input這樣的:

import ast 
a = raw_input("Please enter a dictionary: ") 
d = ast.literal_eval(a) 
print d 

輸出:

{'a': 1, 'b': 2} 

說明:

input()就像做eval(raw_input(....))它在你的情況下轉變爲快譯通字符串,ast.literal_eval()期待一個字符串不是一個字典。

另外要注意,在蟒蛇3.X沒有raw_input()因爲它轉化爲input()

您也可以參考這個post

相關問題