我知道标题看起来有点混乱,但一旦我分享代码,你就会知道我在说什么。总体而言,我对JSON和Python还比较陌生。我正在尝试用3个简单的命令制作一个杂货清单程序:list、add和remove。列表将列出您通过添加添加添加的所有食品杂货。删除按名称删除项目。这就是我遇到麻烦的地方。这是我的设置的样子:
{"grocery_list":
[{"itemname": "Milk"},
{"itemname": "Bread"},
{"itemname": "Bacon"}]
}
这是我的删除函数和数据:
with open('groceriesjson.json','r') as data_file:
data = json.load(data_file)
def removeitem(item):
global data
for i in range(len(data)):
if data[i]["itemname"] == item:
data.pop(i)
print("Successfully removed from your list.")
main()
当我运行该程序时,会出现以下错误:
Traceback (most recent call last):
File "C:\Users\me\Desktop\test.py", line 48, in <module>
main()
File "C:\Users\me\Desktop\test.py", line 44, in main
removeitem(toremove)
File "C:\Users\me\Desktop\test.py", line 18, in removeitem
if data[i]["itemname"] == item:
KeyError: 0
我也尝试过使用range(1,len(data))
,但是当我运行它时,什么都没有发生。如果您需要更多的代码片段或任何其他内容,请发表评论。非常感谢
您未能分阶段测试您的程序;您现在有多个错误需要纠正。请参阅debugging help的这个可爱的参考。如果没有其他内容,请插入频繁的
print
命令以检查您对数据类型和值的假设您没有“JSON对象”;您有一个Python
dict
。更好的例子是,删除输入序列并用硬编码的dict等价物替换它。调试的第一步是隔离问题,这表明输入是独立的现在,看看您的结构:dict有一个条目,由字符串“杂货店列表”键入。您的直接错误是,您试图使用下标0以
list
的形式访问此文件。这对于下一级数据[“杂货店列表”]很有效,因为是列表接下来,当您在迭代列表时更改列表时,您将遇到问题。请参阅该主题的相关问题,以获取提示。“正常”的方法是使用列表理解,如
Sushanth
的答案所示从删除循环中调用例程
main
;这几乎肯定是一个错误,特别是如果这个例程确实是您的主程序。放入print
语句并按照逻辑查看其实际工作原理也许是这样的:
您可以改为使用
list comprehension
相关问题 更多 >
编程相关推荐