尝试使用词典时,“TypeError:'type'对象不支持项目分配”

时间:2011-07-24 06:50:16

标签: python dictionary

这是一个非常基本的片段加法器/查看器/移除器。我希望它工作的方式,用户将输入名称(字典键),然后输入文本正文(键的值),以添加条目。例如 - “Testsnippet”,它是值“这是一个测试文本片段”的关键。

我不知道它有什么问题。尝试使用“添加/修改”选项让我输入我想要输入的片段文本作为键的值,但它给了我这个错误:TypeError:'type'对象不支持项目分配

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

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!"

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

您正在使用or加入两个条件,因此如果其中一个子条件为真,则整体条件为真。第一个条件是action == "add",如果action等于"add",则为真。 or另一边的条件只是"modify"。在if语句中,任何非空字符串都被视为true,因此该条件始终为true。它应该是:

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