使用字典时出现“TypeError: 'type'对象不支持项赋值”

0 投票
3 回答
22186 浏览
提问于 2025-04-16 22:09

这是一个非常基础的代码片段添加、查看和删除的工具。我希望它的工作方式是,用户输入一个名字(字典的键),然后输入文本内容(键的值),以添加条目。比如说,"Testsnippet" 是键,而 "This is a test text snippet." 是它的值。

我不知道哪里出了问题。尝试使用“添加/修改”选项时,我可以输入我想作为键的值的片段文本,但它给我报了这个错: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!"

3 个回答

0

根据这段代码,你会发现除了“view”以外的任何命令都会执行添加或修改的操作。原因在于你的添加或修改条件:

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

你用or把两个条件连接在一起,这样只要其中一个条件为真,整体条件就会为真。第一个条件是action == "add",这表示如果action等于"add",这个条件就成立。而or另一边的条件只是"modify"。在if语句中,任何非空字符串都被认为是真,所以这个条件总是成立。正确的写法应该是:

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

我同意Ignacio Vazquez-Abrams的看法,你应该使用你的全局字典clip_list。顺便说一下,你的操作remove也应该进行修改。可以用del clip_list[snippet_name]或者clip_list.pop(snippet_name)来实现。

1

我觉得你在写 dict[str(snippet_name)] 的地方,其实是想写 clip_list[str(snippet_name)]。不过如果所有的键和值都一样的话,你应该用集合(set)来代替。

撰写回答