私は 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のものですか?
この方法でインポートしたい理由は、すべてのハードウェア セットアップを 1 つのファイル (かなりの量のコード) で実行し、これを実際にロボットにタスクを実行させるファイルにインポートできるようにするためです。
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 のサイクル速度で実行し、1000 回ループを繰り返します。これは機能し、ループが中断してスクリプトが終了するまで実行されます。その後、同じ NoneType エラーが発生し、スクリプトが終了してもモーターは動作し続けます。動作は、KeyboardInterrupt と同じです。そのエラーメッセージだけで、トレースバックはありません。