AttributeError: ‘NoneType‘ object has no attribute ‘landmark‘

最近碰到的一个问题:

AttributeError: ‘NoneType’ object has no attribute ‘landmark’

起因:

在做一个手指滑动(用摄像头识别,通过计算手指关键点的距离判定)控制Windows系统音量的程序(用Python写的)

分析:

先放上一段我出错的地方
在这里插入图片描述

从英文的字面意思来看,这里报错的类型属于引用错误,这个报错信息表示的是,NoneType这种类型的对象没有 landmark 这个属性

当时为什么出错?

看到59行这里,使用了一个 if ,最开始的程序时没有这个 if 的,这会导致一个什么问题呢?

在进行手指距离计算的时候,需要用到这个对象里面的数据,而这个对象是实时更新的,当摄像头没有捕捉到手时,这个对象里面就是None,所以就会报错,所以这会引发这种错误信息

怎么找出这个错误的?

用的是上图中第58行的那个输出语句,当时发现在未检测到手部时,屏幕上面会一直输出一个名为None的数值,而当我将手放置到摄像头前,检测出手的时候,就会出现一堆标记着 x y z 的数值,把手移开这些数值又会消失,所以瞬间就明白是为什么了

解决这个问题:

方法也很简单,就是像59行这样,在使用到这个对线之前使用 if 对其进行是否为空的判定,如果这个对象为空的话,这个 if 语句肯定也不会成立,自然不会去计算里面的数值

反思:

在使用到某个的对象的时候,应该先检查他是否为空,否则,将出现类似上述中的这个错误,现实中,出现空错误往往是致命的,就像在 C 语言中出现了空指针错误一样

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值