Exception ignored in atexit callback: <function _ros_atexit at 0x7f9a71cebd80>
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