我正在以下脚本中分析python中的AWS响应:
#var definition
conversationName = 'NO NAME'
#in the MyClass
if len(resp['FaceMatches'])>0:
faceRecognized = resp['FaceMatches'][0]['Face']['ExternalImageId']
self.logger.info(str(faceRecognized))
if resp['FaceMatches'][0]['Face']['ExternalImageId'] == self.conversationName:
self.logger.info("Name is the same")
return
else:
self.logger.info('Name has changed!')
self.conversationName=faceRecognized.split('_')[0]
self.pepperTTS.say("Hi "+str(faceRecognized.split('_')[0])+". Can I help you with something?")
return
else:
self.logger.info("No face rekognized so far.")
return
第二个IF ELSE存在问题。当我运行程序时,似乎完全忽略了该IF ELSE,并且既不打印“ Name is same”,也不打印“ Name has been changes”。而且在运行脚本时它不会显示任何错误。
有人看到错误或可以提供一些纠正脚本的提示吗?
答案 0 :(得分:0)
最可能发生的情况是resp['FaceMatches'][0]['Face']['ExternalImageId']
正在引发异常,因为这些键/索引之一是错误的,然后该异常没有被捕获并被默默地吞下了-不幸的是,但是在NAOqi中,很多如果没有人抓住异常,它们就会被吞没(例如,在ALMemory订阅的回调中-可能在这里)。
因此,您应该将所有这些块包装在一个大try / except中,并打印捕获的任何异常。
这是一个足够常见的情况,我创建了一个带有log_exceptions装饰器的帮助程序库(documented here),您可以将其放入吞咽异常的任何函数(通常是:ALMemory事件和信号回调;用qi.async调用的任何东西) ,从您的服务外部调用的任何内容...),因此您的代码不会在各处都被try / except弄乱。