我正在使用以下脚本分析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。当我运行程序时,它似乎完全忽略了这一点,而且既不会打印“名称是相同的”,也不会打印“名称已更改”。并且在运行脚本时不会显示任何错误。
有没有人看到这个错误,或者能给出一些提示来改正这个脚本?
发布于 2018-09-13 00:14:51
最可能发生的情况是,resp['FaceMatches'][0]['Face']['ExternalImageId']因为这些键/索引中的一个错误而引发异常,然后异常不会被捕获并被默默地吞噬-这是不幸的,但在NAOqi中,如果没有人捕获许多异常(例如,在ALMemory订阅的回调中-就像您在这里可能遇到的那样)。
因此,您应该将所有块包装在一个较大的try/except中,并打印捕获到的任何异常。
这是一种非常常见的情况,我创建了一个带有log_exceptions装饰器的助手库(documented here),您可以将其放在任何允许异常的函数上(通常是: ALMemory事件和信号回调;任何使用qi.async调用的函数,任何从您的服务外部调用的函数...),这样您的代码就不会到处乱七八糟地使用try/ the。
https://stackoverflow.com/questions/52298256
复制相似问题