2

我将首先说我不是最熟悉python,这个问题可能是我不了解的更普遍的python 问题(即明显的重复)。

在 ev3 的 python 绑定中,电机的引用如下:

# 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 是 python 中 None 的类型,我只是不知道为什么直接编译有效但导入无效。

第一次编辑

好的,所以我将其编译为:

$: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 相同。没有给出回溯,只是那个错误消息。

4

1 回答 1

0

首先,python 是一种语言,它的代码是由单词组成的,另一方面,Lego Mindstorms “语言”是由简单的块组成的。也就是说,从逻辑上讲,这两种语言不能混合在一起,也没有任何共同点。由于对两者都有丰富的经验,我从未发现他们之间有任何共同点。

于 2016-12-04T20:20:53.317 回答