【问题标题】:how to take user input as dictionary and display its content in python如何将用户输入作为字典并在python中显示其内容
【发布时间】:2015-04-16 08:31:27
【问题描述】:

我正在尝试将用户输入作为字典并使用以下代码将其显示在屏幕上

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

【问题讨论】:

  • 发布您传递的输入。
  • 输入:{'a':1,'b':2}
  • 放一个 print a 来检查给定的真实输入
  • 我有 python 2.6 它依赖于版本
  • 尝试使用raw_input() 代替输入,也尝试使用print repr(a) 来查看您得到的输入。

标签: python scripting python-2.6


【解决方案1】:

只需像这样转换为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(....)) 在您的情况下将字符串转换为 dict,ast.literal_eval() 期望的是字符串而不是 dict。

还要注意,在 python 3.x 中没有 raw_input(),因为它已转换为 input()

你也可以参考这个post

【讨论】:

    【解决方案2】:

    ast.literal_eval 用于将字符串转换为 dict 对象,据我猜测您正在插入 {'a':1,'b':1} (dict type) ,然后尝试在其上使用 ast.literal_eval 。当您将 dict 传递给接受字符串的函数时,它会出错)。如果要将字典作为字符串,请使用 "{'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】:

      我编辑了您的代码检查差异。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多