将脚本导入另一个脚本时出现问题
Problem when importing a script into another one
我为一个由步进电机驱动的带传动机器人写了两个脚本。
脚本 "DUALSTEPPER_LIBARY_002.py" 包含一个 DualStepper Class 和一些函数,如前进、后退等。
该脚本应该 运行 在后台通过导入另一个名为 "Testlauf_001.py".
的脚本
当我在脚本 "DUALSTEPPER_LIBARY_002.py" 中创建 DualStepper class 的实例并编写一些使用提供的函数的代码时,我可以毫无问题地执行代码。电机可以正常前后移动。
只要我将脚本 "DUALSTEPPER_LIBARY_002.py" 导入脚本 "Testlauf_001.py",节目就会停止并显示一条错误消息:
Traceback (most recent call last):
File "/home/pi/Documents/PythonFiles/Stepperbox Amazon/Testlauf_001.py", line 7, in <module>
antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
NameError: name 'DualStepper' is not defined
为什么?有一个 class 叫做 DualStepper。怎么不能定义?
如果有人能告诉我我的 MISTKAE,那就太好了。
谢谢
这些是重现问题的最短代码示例:
脚本"DUALSTEPPER_LIBARY_002.py":
import time
import RPi.GPIO as GPIO
class DualStepper:
def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
self.motor_name = motor_name
self.direction_pin1 = direction_pin1
self.direction_pin2 = direction_pin2
self.step_pin1 = step_pin1
self.step_pin2 = step_pin2
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
GPIO.setup(self.direction_pin1, GPIO.OUT)
GPIO.setup(self.direction_pin2, GPIO.OUT)
GPIO.setup(self.step_pin1, GPIO.OUT)
GPIO.setup(self.step_pin2, GPIO.OUT)
GPIO.output(self.direction_pin1, 1)
GPIO.output(self.direction_pin2, 0)
for i in range(steps):
GPIO.output(self.step_pin1, True)
GPIO.output(self.step_pin2, True)
time.sleep(stepdelay)
GPIO.output(self.step_pin1, False)
GPIO.output(self.step_pin2, False)
time.sleep(stepdelay)
antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
脚本"Testlauf_001.py":
import time
import RPi.GPIO as GPIO
import DUALSTEPPER_LIBARY_002
for n in range (3):
antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
time.sleep(.5)
GPIO.cleanup()
您应该在 class 定义之外初始化 antriebsmotoren
对象。
试试这个:
脚本 A:
import time
import RPi.GPIO as GPIO
class DualStepper:
def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
self.motor_name = motor_name
self.direction_pin1 = direction_pin1
self.direction_pin2 = direction_pin2
self.step_pin1 = step_pin1
self.step_pin2 = step_pin2
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
GPIO.setup(self.direction_pin1, GPIO.OUT)
GPIO.setup(self.direction_pin2, GPIO.OUT)
GPIO.setup(self.step_pin1, GPIO.OUT)
GPIO.setup(self.step_pin2, GPIO.OUT)
GPIO.output(self.direction_pin1, 1)
GPIO.output(self.direction_pin2, 0)
for i in range(steps):
GPIO.output(self.step_pin1, True)
GPIO.output(self.step_pin2, True)
time.sleep(stepdelay)
GPIO.output(self.step_pin1, False)
GPIO.output(self.step_pin2, False)
time.sleep(stepdelay)
antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
脚本 B:
import time
import RPi.GPIO as GPIO
from DUALSTEPPER_LIBARY_002 import antriebsmotoren
for n in range (3):
antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
time.sleep(.5)
GPIO.cleanup()
我为一个由步进电机驱动的带传动机器人写了两个脚本。 脚本 "DUALSTEPPER_LIBARY_002.py" 包含一个 DualStepper Class 和一些函数,如前进、后退等。 该脚本应该 运行 在后台通过导入另一个名为 "Testlauf_001.py".
的脚本当我在脚本 "DUALSTEPPER_LIBARY_002.py" 中创建 DualStepper class 的实例并编写一些使用提供的函数的代码时,我可以毫无问题地执行代码。电机可以正常前后移动。
只要我将脚本 "DUALSTEPPER_LIBARY_002.py" 导入脚本 "Testlauf_001.py",节目就会停止并显示一条错误消息:
Traceback (most recent call last):
File "/home/pi/Documents/PythonFiles/Stepperbox Amazon/Testlauf_001.py", line 7, in <module>
antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
NameError: name 'DualStepper' is not defined
为什么?有一个 class 叫做 DualStepper。怎么不能定义?
如果有人能告诉我我的 MISTKAE,那就太好了。 谢谢
这些是重现问题的最短代码示例:
脚本"DUALSTEPPER_LIBARY_002.py":
import time
import RPi.GPIO as GPIO
class DualStepper:
def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
self.motor_name = motor_name
self.direction_pin1 = direction_pin1
self.direction_pin2 = direction_pin2
self.step_pin1 = step_pin1
self.step_pin2 = step_pin2
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
GPIO.setup(self.direction_pin1, GPIO.OUT)
GPIO.setup(self.direction_pin2, GPIO.OUT)
GPIO.setup(self.step_pin1, GPIO.OUT)
GPIO.setup(self.step_pin2, GPIO.OUT)
GPIO.output(self.direction_pin1, 1)
GPIO.output(self.direction_pin2, 0)
for i in range(steps):
GPIO.output(self.step_pin1, True)
GPIO.output(self.step_pin2, True)
time.sleep(stepdelay)
GPIO.output(self.step_pin1, False)
GPIO.output(self.step_pin2, False)
time.sleep(stepdelay)
antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
脚本"Testlauf_001.py":
import time
import RPi.GPIO as GPIO
import DUALSTEPPER_LIBARY_002
for n in range (3):
antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
time.sleep(.5)
GPIO.cleanup()
您应该在 class 定义之外初始化 antriebsmotoren
对象。
试试这个:
脚本 A:
import time
import RPi.GPIO as GPIO
class DualStepper:
def __init__(self, motor_name, direction_pin1, direction_pin2, step_pin1, step_pin2):
self.motor_name = motor_name
self.direction_pin1 = direction_pin1
self.direction_pin2 = direction_pin2
self.step_pin1 = step_pin1
self.step_pin2 = step_pin2
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
def vorwaerts(self, steps=200, stepdelay=.005, initdelay=.05):
GPIO.setup(self.direction_pin1, GPIO.OUT)
GPIO.setup(self.direction_pin2, GPIO.OUT)
GPIO.setup(self.step_pin1, GPIO.OUT)
GPIO.setup(self.step_pin2, GPIO.OUT)
GPIO.output(self.direction_pin1, 1)
GPIO.output(self.direction_pin2, 0)
for i in range(steps):
GPIO.output(self.step_pin1, True)
GPIO.output(self.step_pin2, True)
time.sleep(stepdelay)
GPIO.output(self.step_pin1, False)
GPIO.output(self.step_pin2, False)
time.sleep(stepdelay)
antriebsmotoren = DualStepper("antriebsmotoren", 20, 16, 21, 12)
脚本 B:
import time
import RPi.GPIO as GPIO
from DUALSTEPPER_LIBARY_002 import antriebsmotoren
for n in range (3):
antriebsmotoren.vorwaerts(steps=400, stepdelay=.001, initdelay=.05)
time.sleep(.5)
GPIO.cleanup()