所以我已经阅读了这篇文章:Adding session attributes in Python for Alexa skills它解决了我能够存储多个会话变量的问题。
但是,现在我的问题是在另一个函数中调用这些会话变量。这是我想要做的一个例子:
speech_output = "Your invoice for " + session['attributes']['invoiceAmount'] + \
" dollars."
我也尝试过这种代码将局部变量设置为会话变量:
invoice_amount = int(session['attributes']['invoiceAmount'])
我做错了什么?我之前从未用Python编程,所以我只是通过查看亚马逊最喜欢的Color示例代码并根据我的需要进行自我教学。我实际上有三个会话变量,但显然如果我可以让其中一个变量工作,我可以找出另一个。谢谢。
答案 0 :(得分:1)
我真的很抱歉,我终于找到了错误。我的会话变量存储整数,但我试图将这些整数与文本连接起来。我没有意识到我需要先将它们转换为字符串。我转换成了一个字符串,解决了我所有的问题。
答案 1 :(得分:0)
您的问题很可能涉及session
变量的范围。
以下代码是颜色专家技能的意图调用。
正如您在第1行中看到的那样,变量session
被定义为参数。在第12行,变量被传递给函数set_color_in_session(intent,session)
。
def on_intent(intent_request, session): # <-------------
""" Called when the user specifies an intent for this skill """
print("on_intent requestId=" + intent_request['requestId'] +
", sessionId=" + session['sessionId'])
intent = intent_request['intent']
intent_name = intent_request['intent']['name']
# Dispatch to your skill's intent handlers
if intent_name == "MyColorIsIntent":
return set_color_in_session(intent, session) # <-------------
elif intent_name == "WhatsMyColorIntent":
return get_color_from_session(intent, session) # <-------------
elif intent_name == "AMAZON.HelpIntent":
return get_welcome_response()
else:
raise ValueError("Invalid intent")
从提供的信息中我相信你定义了自己的函数被自定义意图触发,并且很可能忘记将session
变量传递给这些函数。同样,变量session
只会在函数内部存在,如果它作为参数传入。以函数def get_color_from_session(intent, session):
为例。因为session
作为参数传入,所以在第6行favorite_color = session['attributes']['favoriteColor']
中的此函数中可以使用session
。
如果你没有传入变量session
,你将引用一个可能不存在的名为def get_color_from_session(intent, session):
session_attributes = {}
reprompt_text = None
if "favoriteColor" in session.get('attributes', {}):
favorite_color = session['attributes']['favoriteColor'] #<-------------
speech_output = "Your favorite color is " + favorite_color + \
". Goodbye."
should_end_session = True
else:
speech_output = "I'm not sure what your favorite color is. " \
"You can say, my favorite color is red."
should_end_session = False
# Setting reprompt_text to None signifies that we do not want to reprompt
# the user. If the user does not respond or says something that is not
# understood, the session will end.
return build_response(session_attributes, build_speechlet_response(
intent['name'], speech_output, reprompt_text, should_end_session))
的局部变量。
out float DEPTH ;
...
DEPTH = gl_Position.z / gl_Position.w;