【问题标题】:"TypeError: 'type' object does not support item assignment" when trying to use dictionaries尝试使用字典时出现“TypeError:‘类型’对象不支持项目分配”
【发布时间】:2011-07-24 06:50:15
【问题描述】:

这是一个非常基本的sn-p adder/viewer/remover。我希望它工作的方式是,用户将输入一个名称(字典键),然后输入文本正文(键的值),以添加条目。例如-“Testsn-p”,它是值“This is a test text sn-p”的键。

我不知道它有什么问题。尝试使用“添加/修改”选项让我输入我想作为键值输入的 sn-p 文本,但它给了我这个错误:TypeError: 'type' object does not support item assignment

此外,尝试使用删除选项只会给我添加/修改选项,而不是删除选项。使用“视图”可以正常工作。

from sys import exit

clip_list = {'test':'whatever, this is a test'}

breaker = "--------------------"

while True:
    print "What do you want to do?"
    print "[view] [add/modify] [remove] [quit]"

    action = raw_input("> ")

    if action == "view":
        view_choice = raw_input("Enter snippet name to view OR type 'all' for the entire list:\n> ")
        if view_choice == 'all':
            print clip_list
            print breaker
        else:
            print clip_list[view_choice]
            print breaker

    elif action == "add" or "modify":
        snippet_name = raw_input("Enter snippet name:\n> ")
        snippet_input = raw_input("Text:\n> ")
        dict[str(snippet_name)] = str(snippet_input)
        print "Added!"

    elif action == "remove":
        snippet_name = raw_input("Enter snippet name to remove:\n> ")
        del dict[snippet_name]
        print "Deleted!"

    elif action == "quit":
        print "Goodbye!"
        exit(0)

    else:
        print "What? Please enter a valid command!"

【问题讨论】:

  • 你也可以说elif action in ["add", "modify"]:,而不是elif action == "add" or action == "modify":,如果你有许多条件是“or”在一起,这对可读性很有好处。

标签: python dictionary


【解决方案1】:

我想你的意思是clip_list[str(snippet_name)],无论你在哪里写dict[str(snippet_name)]。但是如果所有的键和值都相同,那么你应该使用一个集合来代替。

【讨论】:

  • 这行得通,但我仍然不知道为什么删除选项不能正常工作。不过,感谢您的帮助。
【解决方案2】:

我同意 Ignacio Vazquez-Abrams 的观点,您应该使用全局字典 clip_list。 顺便说一句:您的操作remove 也应该修改。 del clip_list[snippet_name]clip_list.pop(snippet_name)

【讨论】:

    【解决方案3】:

    使用该代码,您会发现除“view”之外的任何命令都会执行添加/修改操作。原因是您的添加或修改条件:

        elif action == "add" or "modify":
    

    您将两个条件与or 连接起来,因此如果其中一个子条件为真,则整体条件为真。第一个条件是action == "add",如果action 等于"add",则为真。 or 另一边的条件只是 "modify"。任何非空字符串在 if 语句中都被认为是真的,所以这个条件总是真的。应该是:

        elif action == "add" or action == "modify":
    

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 2016-07-31
      • 2014-02-18
      • 2017-03-26
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2022-08-08
      相关资源
      最近更新 更多