Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

SeeedBus: Crash occsionally.

未关闭
#2,024 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
55/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
冷清
技术栈
python
领域
networking

调研方向

从 can/interfaces/seeedstudio/seeedstudio.py 第 279 行附近开始,这里 _recv_internal 从串行设备读取数据,并使用快速的 open 循环和 recv(0.0) 重现该故障。检查现有的 SeeedStudio 接口测试(如果有),并让非阻塞接收路径将空读取处理为预期的无消息结果,而不会引发 TypeError。

由索引模型根据 Issue 内容生成。

描述

bug
Describe the bug

python-can crashes rarely with the error:

    msg = self.bus.recv(0.0)
  File "/nix/store/0amvifzhc5sv3p1b29dzwxd53njs74z3-python3.13-python-can-4.6.1/lib/python3.13/site-packages/can/bus.py", line 121, in recv
    msg, already_filtered = self._recv_internal(timeout=time_left)
                            ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
  File "/nix/store/0amvifzhc5sv3p1b29dzwxd53njs74z3-python3.13-python-can-4.6.1/lib/python3.13/site-packages/can/interfaces/seeedstudio/seeedstudio.py", line 279, in _recv_internal
    end_packet = ord(self.ser.read())
TypeError: ord() expected a character, but string of length 0 found
To Reproduce

Use a while true loop to open the device quickly.
For my use-case, I needed to implement a flush_rx_buffer() function on user-level:
Please ignore my comments in the code, they may be outdated.

    def flush_rx_buffer(self):
        """Discarding the received buffer."""
        # As python-can does not implement any discarding of old messages, see:
        # https://github.com/hardbyte/python-can/issues/1721
        # The recv(0.0) is probably a non-blocking function, see:
        # https://python-can.readthedocs.io/en/3.3.2/interfaces/socketcan.html
        # That non-blocking function should return immediately.
        while True:
            msg = self.bus.recv(0.0)
            if msg is None:
                return

Expected behavior

Instead of a TypeError I expected to receive a None.

Additional context

OS and version: NixOS
Python version: 3.13
python-can version: 4.6.1
python-can interface/s (if applicable): seeedstudio

I'm using an asus nuc 15, so quite a fast CPU. I don't remember this error to appear on the slow raspberry pi pico.

Traceback and logs
def func():
    return "hello, world!"
主要语言
Python
星标
1.6k
派生
700
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

hardbyte/python-can 的其他 Issue

查看 hardbyte/python-can 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。