使用字典时出现“TypeError: 'type'对象不支持项赋值”
这是一个非常基础的代码片段添加、查看和删除的工具。我希望它的工作方式是,用户输入一个名字(字典的键),然后输入文本内容(键的值),以添加条目。比如说,"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)来代替。