首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeError:无法实例化抽象类

TypeError:无法实例化抽象类
EN

Stack Overflow用户
提问于 2022-08-22 11:29:49
回答 1查看 70关注 0票数 1

我试图运行代码在CAN上发送UDS扩展诊断请求。

代码语言:javascript
复制
from uds import Uds

PCM = Uds(resId=0x200, reqId=0x250, transportProtocol="CAN", interface="vector", channel="0", appName="CANoe")
response = PCM.send([0x10, 0x03])

但我得到以下类型错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\__work__\Karol_projects\main.py", line 26, in <module>
    PCM = Uds(resId=0x200, reqId=0x250, transportProtocol="CAN", interface="vector", channel="0", appName="CANoe")
  File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\Uds\Uds.py", line 43, in __init__
    self.tp = tpFactory(self.__transportProtocol, configPath=configPath, **kwargs)
  File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\TpFactory.py", line 37, in __call__
    return CanTp(configPath=configPath, **kwargs)
  File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\Can\CanTp.py", line 96, in __init__
    self.__connection = canConnectionFactory(self.callback_onReceive,
  File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\Can\CanConnectionFactory.py", line 52, in __call__
    CanConnectionFactory.connections[connectionKey] = CanConnection(callback, filter,
  File "C:\__work__\Karol_projects\venv\lib\site-packages\uds\uds_communications\TransportProtocols\Can\CanConnection.py", line 21, in __init__
    listener = can.Listener()
TypeError: Can't instantiate abstract class Listener with abstract method on_message_received

我见过类似的帖子,但无论如何我都找不到合适的解决办法。我只导入python和python模块,并试图发送can消息。我对OOP没有太多的经验,尤其是在抽象类方面。

EN

Stack Overflow用户

回答已采纳

发布于 2022-08-22 11:56:06

python-uds是一个较旧的库,已经有3年半没有见过新版本了(版本1.0.2于2019年3月发布)。另一方面,python-can在这段时间里取得了很大的进步,并发布了一个重要的更新,版本4.0.0 2022年2月。该版本与python-uds根本不兼容,从而导致您看到的跟踪。

你有两个选择:

  • 降级python-can;上一次发布python-uds时,python-can发布了3.1.1版本,但以后的3.x.x版本也可能有效。有关完整列表,请参见在PyPI上发布页面。您可以试着阅读变化量g,看看如果上一个3.x发行版3.3.4不起作用,是否有什么特别之处,但3.1.1确实会查看最新版本的工作效果。或者,只需将版本划分为3.3.4和3.1.1,直到找到最后一个兼容版本。
  • 切换到另一个Uds库。项目出现了更多的最新版本( 0.2.0版本是在去年12月发布的,他们的GitHub存储库显示至少到2022年2月仍在积极开发。
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73444356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档