2016-11-21 2 views
2

Я начну с этого, сказав, что я не самый знакомый с 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. Данной трассировки нет, просто это сообщение об ошибке.

+0

do 'import hardware' вместо' from hardware import * ' –

+0

Я сделал это и получил ту же ошибку, что и раньше –

+2

Пожалуйста, разместите полный стек. По какой-то причине деструктор LargeMotor не работает и создает ошибку, которая у вас есть. И деструктор, вероятно, называется, потому что ваш скрипт заканчивается. Если вы добавите код в свой do_something.py после импорта, работает ли этот код? – Guillaume

ответ

0

Прежде всего, python - это язык, на котором его коды формируются из слов, а с другой стороны, «язык» Lego Mindstorms образован из простых блоков. Тем не менее, логически эти два языка нельзя смешивать и не имеют ничего общего. И имея большой опыт работы с обоими, я никогда не встречал между ними ничего общего.

+0

Я хотел закрыть этот вопрос, так как я не нашел ответа и больше не имел доступа к оборудованию. Спасибо, что ответили. Я использовал интерфейс ev3dev с привязками python. Я знаю программное обеспечение mindstorms, о котором вы говорите, с программными «блоками». Я думал, что это могла быть проблема, предложенная Уэйн Вернер выше, где питон и библиотека ev3dev не взаимодействовали должным образом, однако у меня не было возможности проверить. –

Смежные вопросы