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のものですか?

この方法でインポートしたい理由は、すべてのハードウェア セットアップを 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 と同じです。そのエラーメッセージだけで、トレースバックはありません。

4

1 に答える 1