Pepper完全忽略了IF ELSE

时间:2018-09-12 15:02:37

标签: python pepper

我正在以下脚本中分析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”。而且在运行脚本时它不会显示任何错误。

有人看到错误或可以提供一些纠正脚本的提示吗?

1 个答案:

答案 0 :(得分:0)

最可能发生的情况是resp['FaceMatches'][0]['Face']['ExternalImageId']正在引发异常,因为这些键/索引之一是错误的,然后该异常没有被捕获并被默默地吞下了-不幸的是,但是在NAOqi中,很多如果没有人抓住异常,它们就会被吞没(例如,在ALMemory订阅的回调中-可能在这里)。

因此,您应该将所有这些块包装在一个大try / except中,并打印捕获的任何异常。

这是一个足够常见的情况,我创建了一个带有log_exceptions装饰器的帮助程序库(documented here),您可以将其放入吞咽异常的任何函数(通常是:ALMemory事件和信号回调;用qi.async调用的任何东西) ,从您的服务外部调用的任何内容...),因此您的代码不会在各处都被try / except弄乱。