Я начну с этого, сказав, что я не самый знакомый с python, и эта проблема может быть более общей питонной вещью, которую я не получаю (т.е. явно очевидный дубликат).Импорт Python (может быть python или Lego Mindstorms libs)
В питоне креплениях для EV3, двигатель упоминается как это:
# hardware.py #
import ev3dev.ev3 as ev3
motor = ev3.LargeMotor('outA')
motor.connected
Где OUTA 'является выходным портом на роботе, что двигатель подключен.
Если я после этого сделать:
$:python hardware.py
я не получаю никаких проблем, и я могу использовать двигатель нормально. Однако, если я пишу новый файл
# do_something.py #
from hardware import *
Я получаю сообщение об ошибке:
Exception TypeError: "'NoneType' object is not callable" in <bound method LargeMotor.__del__ of <ev3dev.core.LargeMotor object at 0xb67d2fd0>> ignored
Кто-нибудь знает, почему это происходит? Это вещь python или вещь ev3?
Моя причина для импорта таким образом заключается в том, что я могу выполнить всю установку оборудования в одном файле (значительном фрагменте кода), а затем импортировать его в файлы, которые фактически заставляют робота выполнять задачи.
Я знаю, что NoneType - это тип None в python, я просто не знаю, почему работает прямой компилятор, но импорт не работает.
первый Редактировать:
Хорошо, так что я скомпилирован как:
$:python hardware.py do_something.py
$:python do_something.py
И это не дало никаких ошибок.
Однако, по их просьбе, я добавил больше кода, hardware.py тот же:
# do_something.py #
from hardware import *
counter = 0
while True:
if (counter >= 1000):
break
motor.run_direct(duty_cycle_sp = 20)
counter += 1
Т.е. запустите двигатель с циклической скоростью 20 до тех пор, пока мы не пройдем через тысячу итераций цикла. Это работает и работает до тех пор, пока цикл не разрывается и сценарий не заканчивается. Затем дается такая же ошибка NoneType, и двигатель продолжает работать, даже несмотря на завершение сценария. Поведение такое же с KeyboardInterrupt. Данной трассировки нет, просто это сообщение об ошибке.
do 'import hardware' вместо' from hardware import * ' –
Я сделал это и получил ту же ошибку, что и раньше –
Пожалуйста, разместите полный стек. По какой-то причине деструктор LargeMotor не работает и создает ошибку, которая у вас есть. И деструктор, вероятно, называется, потому что ваш скрипт заканчивается. Если вы добавите код в свой do_something.py после импорта, работает ли этот код? – Guillaume