Python 无法封送响应:键必须是str、int、float、bool或None,而不是type
我在python代码中遇到了一个以前从未遇到过的奇怪错误。有人能给我解释一下我该做什么吗? 我正在努力培养Alexa技能。 代码逻辑:如果用户已订阅,则说“您已订阅”,否则发送订阅请求Python 无法封送响应:键必须是str、int、float、bool或None,而不是type,python,alexa,alexa-skills-kit,alexa-skill,alexa-voice-service,Python,Alexa,Alexa Skills Kit,Alexa Skill,Alexa Voice Service,我在python代码中遇到了一个以前从未遇到过的奇怪错误。有人能给我解释一下我该做什么吗? 我正在努力培养Alexa技能。 代码逻辑:如果用户已订阅,则说“您已订阅”,否则发送订阅请求 class GoogleIntentHandler(AbstractRequestHandler): def can_handle(self, handler_input): return ask_utils.is_intent_name("GoogleIntent")
class GoogleIntentHandler(AbstractRequestHandler):
def can_handle(self, handler_input):
return ask_utils.is_intent_name("GoogleIntent")(handler_input)
def handle(self, handler_input):
in_skill_response=in_skill_product_response(handler_input)
if in_skill_response:
subscription=[ l for l in in_skill_response.in_skill_products
if l.reference_name == "GoogleTarget"]
if is_entitled(subscription): #return true or false
try:
return (
handler_input.response_builder
.speak("You are subscribed")
.response
)
except Exception as error:
logger.info("Error: {}".format(error))
raise
else:
return handler_input.response_builder.add_directive(
SendRequestDirective(
name="Buy",
payload= {
InSkillProduct: {
"productId": "amzn1.adg.product.0c.....6b1ffa",
}
},
token= "correlationToken")
).response
else:
pass
错误:
Runtime.marshallError:无法封送响应:键必须是str、int、float、bool或None,而不是type
错误取决于封送的数据;我们的出发点将是关注这一点,而不是向我们提供代码而不是数据。日志是你的朋友repr()
值……在理想的世界中,如果你能弄清楚什么是不能封送的数据,你可以构建一个不使用任何Alexa相关工具的复制器,这样那些没有相关工具集/API帐户等的人就可以构造和测试答案。(错误消息意味着你正在传递一个类型,比如str
,int
,float
,等等,你应该在某个地方传递一段数据,它本身就是这些类型中的一种)。@CharlesDuffy感谢你的回复。我最初认为我没有传递str,int,float等等,正如它所说的“必须是str…”。另外,您建议我如何使用log?是的,我同意;但问题是,如果您将名为str
的类作为参数传递到某个地方,那么类str
不是str
,而是类型
,因此可以解释错误