Ошибка атрибута при использовании python-can (модуль ‘can’ не имеет атрибута ‘interface’)

#python #can-bus

#python #can-bus

Вопрос:

Я получаю сообщение об ошибке при запуске следующего кода:

 import can #importing CAN module
import time

bus1 = can.interface.Bus(bustype='vector', channel=0, bitrate=500000,
                         app_name='python-can')
bus2 = can.interface.Bus(bustype='vector', channel=1, bitrate=500000,
                         app_name='python-can')

msg1 = can.Message(arbitration_id = 0xa1,
                   data = [1, 2, 3, 4, 5, 6, 7, 8],
                   extended_id = False)
msg2 = can.Message(arbitration_id = 0xa3,
                   data = [8, 7, 6, 5, 4, 3, 2, 1],
                   extended_id = False)
bus1.send(msg1)
time.sleep(1.0)
bus2.send(msg2)
bus1.shutdown()
bus2.shutdown()
  

Я могу импортировать модуль CAN, но затем я получаю эту ошибку:

 AttributeError: module 'can' has no attribute 'interface'
  

Я пытаюсь отправить фиктивные сообщения в виртуальный CAN. Как я могу исправить эту ошибку?

Комментарии:

1. Что произойдет, если вы удалите .interface ? Просто bus1 = can.Bus(...) ?

2. Он выдает ошибку атрибута ошибки: модуль ‘can’ не имеет атрибута ‘Bus’ @JosSeldenthuis

Ответ №1:

Сегодня у меня возникла эта проблема при использовании python-can 3.3.3, и я решил ее, обновив до версии 3.3.4, которая была выпущена не так давно.

Поскольку над пакетом все еще ведется работа, похоже, что они случайно выпустили сломанную версию с 3.3.3.

Ответ №2:

Я допустил глупую ошибку и вызвал файл:

 can.py
  

в той же папке! Очевидно, я импортировал неправильный файл, поэтому переименование этого файла устранило мою проблему.

Ответ №3:

В случае, если эта проблема возникает с pyinstaller 4.0 после того, как файл .py упакован как .exe, добавьте в код строку ниже;

 import can.interfaces.vector