Kiwi TCMS 3.49版本RPC API调用报错求助:RemoteDisconnected属性不存在
嘿,我一眼就看出你这个报错的问题所在了——这是Python版本兼容性搞的鬼!
你看,报错里提到AttributeError: 'module' object has no attribute 'RemoteDisconnected',是因为http.client.RemoteDisconnected这个异常类是Python 3.5才新增的,而你现在用的是Python 3.4,这个版本里根本没有这个属性。但Kiwi TCMS 3.49对应的tcms_api库已经适配了Python 3.5+的环境,所以就出现了这个冲突。
给你两个可行的解决方向:
1. 优先升级Python版本(推荐)
Python 3.4早在2019年就停止维护了,不仅有你遇到的这种兼容性问题,还存在安全漏洞。Kiwi TCMS 3.49官方推荐的Python版本是3.6到3.11之间,你直接把Python升级到这个范围内的版本(比如3.8或3.9),然后重新安装适配的tcms-api库,这个问题就能彻底解决。
升级后可以用这个命令确认tcms-api版本是否匹配:
pip show tcms-api
如果版本不对,就执行升级:
pip install --upgrade tcms-api==9.3
(Kiwi TCMS 3.49对应的tcms-api版本是9.3,这个版本完全兼容3.5+的Python)
2. 临时修改代码(仅当无法升级Python时使用)
如果因为某些原因暂时不能升级Python,你可以手动修改tcms_api库的源码:
找到你环境里的/usr/local/lib/python3.4/dist-packages/tcms_api/xmlrpc.py文件,定位到第79行,把:
except http.client.RemoteDisconnected:
替换成Python 3.4支持的异常类型:
except (http.client.IncompleteRead, ConnectionResetError):
这两个异常可以覆盖远程连接断开的场景,能临时解决这个报错。但还是那句话,这只是权宜之计,长期来看一定要升级Python版本。
修改完之后,重新运行你的api_test.py脚本,应该就不会再出现这个错误了。
内容的提问来源于stack exchange,提问作者sophros

