使用Waitress服务Webhook应用时出现NoneType无get属性错误
解决Webhook重启后
data.get('payload').get('to')报错问题 可能的报错原因
- 请求数据缺失关键字段:重启后对方发送的Webhook请求可能调整了格式,比如
data字段为空、payload字段不存在,直接链式调用.get()会触发AttributeError(当data为None时,无法调用.get()方法)。 - 非JSON格式请求:部分请求未正确设置
Content-Type: application/json,导致request.json为None,后续调用.get()会报错。 - 服务器配置变更:重启Waitress后,请求解析相关配置被修改,无法正确解析JSON请求体。
修复代码
@app.route(f'/outbound', methods=["POST"]) def outbound(): # 逐层兜底,避免空值调用方法 request_json = request.json or {} data = request_json.get('data') or {} payload = data.get('payload') or {} to_ = payload.get('to') # 校验必要字段,同时记录异常请求便于排查 if not to_: app.logger.error(f"Invalid request received: {request.data.decode('utf-8')}") return {"error": "Required field 'to' is missing or invalid"}, 400 # 后续业务逻辑 return {"status": "processed"}
排查步骤
- 打印完整请求内容:在函数开头添加日志,记录原始请求体,确认实际收到的数据格式是否符合预期。
- 核对对方Webhook文档:确认对方是否更新了payload格式,是否需要调整字段获取路径。
- 检查Waitress配置:确保重启后的服务器配置没有禁用JSON解析,且能正确处理
application/json类型的请求。
内容的提问来源于stack exchange,提问作者Ace
相关产品推荐
相关产品推荐

