AttributeError: ‘Thread‘ object has no attribute ‘isAlive‘

Exception ignored in atexit callback:
Traceback (most recent call last):
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/core.py", line 513, in _ros_atexit
    signal_shutdown('atexit')
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/core.py", line 496, in signal_shutdown
    if t.isAlive():
       ^^^^^^^^^
AttributeError: 'Thread' object has no attribute 'isAlive'

在使用ropy时,运行client.py文件时报了如上错误,

报错原因如下:

这个错误是由于Python的threading模块在Python 2和Python 3之间的一些接口变化导致的。具体来说,在Python 2中,threading.Thread对象有一个isAlive()方法可以检查线程是否还存活。但在Python 3中,这个方法被移除了。而rospy模块是为Python 2设计的,它使用了Thread.isAlive()这个接口。但在你的代码中,似乎是在Python 3环境下运行,导致无法找到isAlive()而报错。

解决办法:

一、将代码运行环境切换为Python 2

二、修改rospy模块的源码,使用Python 3兼容的接口,比如is_alive()代替isAlive()例如在文件/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/core.py中,第496行:

将if.isAlive:改成if t.is_alive():

 当然,最好的解决方案还是使用Python 2运行rospy相关的代码,因为rospy目前还不完全兼容Python 3。

总结一下:- 原因是Python 2和3中的threading接口变化导致的不兼容
- 解决方法是切换到Python 2环境,或修改rospy源码使用Python 3兼容的接口
- 最好的还是直接使用Python 2来运行rospy

你可能感兴趣的:(ROS,ros)