Python 无法封送响应:键必须是str、int、float、bool或None,而不是type

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")

我在python代码中遇到了一个以前从未遇到过的奇怪错误。有人能给我解释一下我该做什么吗? 我正在努力培养Alexa技能。 代码逻辑:如果用户已订阅,则说“您已订阅”,否则发送订阅请求

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
,而是
类型
,因此可以解释错误