python - 检查json dict中的键时Flask(Python)中出现意外的KeyError
问题描述
这是我在 StackOverflow 上的第一个问题,我被 KeyError 困扰了很长时间,所以我希望有人能够找出问题所在。我正在制作一个具有一些 POST 方法(来自 AJAX)的 Flask 应用程序,并且我的 Python 代码行检查密钥是否在字典 if 'delete' in data
中给了我一个 KeyError。我尝试打印,但它也没有打印我的输出,这很奇怪。这是 Python 代码:
def index():
if request.method == 'POST':
if 'addItem' in request.form:
# Do stuff
elif request.get_json():
data = request.get_json()
print(data) # This is not printing even though I can see the object in Chrome devtools
if 'delete' in data: # This is the line throwing the error
to_remove = data['delete']
session['ingredients'].remove(to_remove)
session.modified = True
return redirect('/')
elif 'name' in data:
# Do stuff
这是两种 JSON 对象的 Javascript/jQuery:
$('.save').on('click', function(event) {
$.ajax({
type: 'POST',
url: '/',
data: JSON.stringify({
'name': $(event.target).siblings(".edit[name='name']").text(),
'key_ingred': $(event.target).siblings(".edit[name='key-ingred']").text(),
'recipe': $(event.target).siblings(".edit[name='recipe']").text(),
'meal': $(event.target).siblings('b').text(),
'date': $(event.target).siblings('.date').text()
}),
contentType: 'application/json',
dataType: 'json'
});
})
$('.delete').on('click', function(event){
$.ajax({
type: 'POST',
url: '/',
data: JSON.stringify({ 'delete': $(event.target).prev().text() }),
success: function() { $(event.target).parent().remove(); },
contentType: 'application/json',
dataType: 'json'
});
$(event.target).parent().remove();
});
编辑:这是完整的回溯消息:
Traceback (most recent call last):
File "/Project/env/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/Project/env/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Project/env/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Project/env/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Project/env/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/Project/env/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Project/app.py", line 40, in index
if 'delete' in data:
KeyError: 'delete'
我也尝试过使用if data.get('delete') is not None
,但也没有用。提前致谢!!!
解决方案
推荐阅读
- amazon-web-services - 如何使用 Amazon Web Services 阻止没有标头的请求
- c# - 带有按钮列的 WPF MVVM 网格
- javascript - 网站是否可以检测 iOS/Android 中的特定应用程序是否在抓取其网站?
- filter - 如何在 yii2 中动态显示 pageSize?
- java - 在 java WorkbookFactory 中编辑 excel
- google-chrome - 如何在 Ubuntu 上的 chrome v68 中临时禁用 XSS Auditor
- sql - 如何在sql数据库中使用索引?
- javascript - Jquery 目标特定元素 - 下拉菜单
- bigdata - 水库采样:从流中驱逐特定项目?
- java - 如何使用卡片布局中的按钮导航到上一张卡片?