【问题标题】:Pepper ignores IF ELSE completelyPepper 完全忽略 IF ELSE
【发布时间】:2018-09-12 15:02:37
【问题描述】:

我正在以下脚本中用 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 并且既不打印“名称相同”也不打印“名称已更改”。并且在运行脚本时不会显示任何错误。

有没有人看到错误或者可以提供一些提示来纠正脚本?

【问题讨论】:

  • 脚本是否打印“到目前为止没有人脸识别。”?如果if len(resp['FaceMatches']) > 0 评估为false,那么您的内部if-else 将不会被评估并且您不会打印您提到的任何一个值。

标签: python pepper


【解决方案1】:

最有可能发生的是resp['FaceMatches'][0]['Face']['ExternalImageId'] 引发异常,因为其中一个键/索引是错误的,然后异常没有被捕获并被默默吞下 - 很不幸,但在 NAOqi 中很多异常得到如果没有人捕获它们(例如,在 ALMemory 订阅的回调中 - 正如您在此处可能遇到的那样),则被吞下。

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

这是一种很常见的情况,我创建了一个带有 log_exceptions 装饰器的辅助库 (documented here),您可以将其放在任何吞下异常的函数上(通常:ALMemory 事件和信号回调;使用 qi.async 调用的任何东西,任何东西)从您的服务外部调用...),因此您的代码不会因为到处都是 try/except 而变得混乱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多